-- =============================================================================
-- Migration: consultant_area_templates and consultant_area_descriptions
-- Description: Opisy i obowiazki obszarow odpowiedzialnosci konsultantow
--              (szablony globalne + edytowalne opisy per konsultant)
--
-- UWAGA ARCHITEKTONICZNA:
--   Obszary odpowiedzialnosci sa przypisane do STANOWISKA (position_consultant_areas).
--   Konsultant dziedziczy obszary ze stanowiska jakie zajmuje (membership -> position).
--   Ponizsze tabele przechowuja wylacznie OPIS i OBOWIAZKI -- dane informacyjne
--   prezentowane uzytkownikom panelu. NIE przechowuja przypisania obszarow.
--
-- UWAGA TECHNICZNA:
--   Kolumny TEXT nie moga miec klauzuli DEFAULT w MySQL/MariaDB w trybie strict.
--   Repozytoria zawsze przekazuja jawna wartosc dla kolumny `description`.
-- =============================================================================
-- 1. Globalny szablon obszaru odpowiedzialnosci
--    Jeden rekord per area_key (ze slownika ConsultantResponsibilityArea)
--    Sluzy jako punkt startowy przy tworzeniu opisu dla konkretnego konsultanta
CREATE TABLE IF NOT EXISTS consultant_area_templates (
    id          INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    area_key    VARCHAR(50)     NOT NULL COMMENT 'Klucz ze slownika ConsultantResponsibilityArea',
    description TEXT            NOT NULL,
    created_at  DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at  DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uq_cat_area_key (area_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Globalne szablony opisow obszarow odpowiedzialnosci konsultanta';
-- 2. Obowiazki globalnego szablonu (osobne rekordy -- edycja per wiersz, lista punktowana)
CREATE TABLE IF NOT EXISTS consultant_area_template_duties (
    id          INT UNSIGNED        NOT NULL AUTO_INCREMENT,
    template_id INT UNSIGNED        NOT NULL,
    content     TEXT                NOT NULL,
    sort_order  SMALLINT UNSIGNED   NOT NULL DEFAULT 0,
    created_at  DATETIME            NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    KEY         idx_catd_template (template_id),
    CONSTRAINT  fk_catd_template
        FOREIGN KEY (template_id)
        REFERENCES consultant_area_templates (id)
        ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Obowiazki globalnego szablonu obszaru odpowiedzialnosci';
-- 3. Opis obszaru odpowiedzialnosci dla konkretnego konsultanta (dane informacyjne)
--
--    Obszar przynalezy do STANOWISKA -- rekord w tej tabeli istnieje tylko wtedy,
--    gdy admin dostosowal opis/obowiazki dla konkretnego konsultanta.
--    Obszary konsultanta sa wyznaczane przez:
--      user_membership -> membership_position_level -> position_consultant_areas
--
--    Inicjalizacja: przy pierwszej edycji dane sa kopiowane z globalnego szablonu.
--    Pozniejsze zmiany szablonu NIE nadpisuja danych konsultanta.
CREATE TABLE IF NOT EXISTS consultant_area_descriptions (
    id            INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    membership_id INT UNSIGNED    NOT NULL COMMENT 'FK do user_membership.id',
    area_key      VARCHAR(50)     NOT NULL COMMENT 'Klucz ze slownika ConsultantResponsibilityArea (musi nalezec do stanowiska konsultanta)',
    description   TEXT            NOT NULL,
    created_at    DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at    DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY  uq_cad_member_area (membership_id, area_key),
    KEY         idx_cad_membership (membership_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Edytowalne opisy obszarow odpowiedzialnosci per konsultant (dane informacyjne)';
-- 4. Obowiazki per konsultant
--    Kopia z szablonu przy pierwszej edycji -- edytowalne niezaleznie od szablonu
CREATE TABLE IF NOT EXISTS consultant_area_description_duties (
    id             INT UNSIGNED        NOT NULL AUTO_INCREMENT,
    description_id INT UNSIGNED        NOT NULL,
    content        TEXT                NOT NULL,
    sort_order     SMALLINT UNSIGNED   NOT NULL DEFAULT 0,
    created_at     DATETIME            NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    KEY           idx_cadd_description (description_id),
    CONSTRAINT    fk_cadd_description
        FOREIGN KEY (description_id)
        REFERENCES consultant_area_descriptions (id)
        ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Obowiazki per konsultant -- edytowalne niezaleznie od szablonu globalnego';
