-- ============================================================
-- GRAFIK ANESTEZJOLOGII — schemat bazy danych MySQL
-- WSSz im. M. Pirogowa — Oddział Anestezjologii
-- Kodowanie: utf8mb4 (pełna obsługa polskich znaków)
-- ============================================================


-- ------------------------------------------------------------
-- Użytkownicy aplikacji (logowanie). Hasła HASZOWANE (bcrypt).
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS uzytkownicy (
  id            INT AUTO_INCREMENT PRIMARY KEY,
  login         VARCHAR(50)  NOT NULL UNIQUE,
  haslo_hash    VARCHAR(255) NOT NULL,          -- password_hash() PHP
  rola          ENUM('admin','oddzialowa','podglad') NOT NULL DEFAULT 'podglad',
  imie_nazwisko VARCHAR(120) NULL,
  aktywny       TINYINT(1)   NOT NULL DEFAULT 1,
  utworzono     TIMESTAMP    NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_polish_ci;

-- ------------------------------------------------------------
-- Pracownicy (baza nazwisk + ustawienia grafikowe)
-- numer = numerek na grafiku (klucz biznesowy)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS pracownicy (
  id              INT AUTO_INCREMENT PRIMARY KEY,
  numer           INT NOT NULL UNIQUE,            -- numerek na grafiku
  imie            VARCHAR(60)  NOT NULL,
  nazwisko        VARCHAR(80)  NOT NULL,
  etat            DECIMAL(4,3) NOT NULL DEFAULT 1.000,  -- 1.000, 0.750, 0.500
  rola            ENUM('ranek','dyzur','ranek+dyzur') NOT NULL DEFAULT 'dyzur',
  trojka          INT NULL,                       -- przynależność do trójki dyżurowej
  ulubiona        ENUM('R','D','N') NOT NULL DEFAULT 'D',
  nadgodziny      TINYINT(1) NOT NULL DEFAULT 0,
  dyzur_med       TINYINT(1) NOT NULL DEFAULT 0,  -- opt-out >72h
  bez_dodatkowych TINYINT(1) NOT NULL DEFAULT 0,
  tylko_dniowki   TINYINT(1) NOT NULL DEFAULT 0,  -- np. nr 1: nigdy noc
  zwolnienie      TINYINT(1) NOT NULL DEFAULT 0,  -- długie zwolnienie (cały okres)
  nowy            ENUM('','tylko-ranki','ranki-2-tyg') NOT NULL DEFAULT '',
  aktywny         TINYINT(1) NOT NULL DEFAULT 1,  -- false = odszedł (zachowujemy historię)
  zmodyfikowano   TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_polish_ci;

-- ------------------------------------------------------------
-- Grafiki miesięczne (nagłówek) — jeden rekord na miesiąc
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS grafiki (
  id            INT AUTO_INCREMENT PRIMARY KEY,
  rok           INT NOT NULL,
  miesiac       INT NOT NULL,                     -- 1-12
  status        ENUM('roboczy','zatwierdzony') NOT NULL DEFAULT 'roboczy',
  obsada_dzien  INT NOT NULL DEFAULT 3,
  obsada_noc    INT NOT NULL DEFAULT 3,
  obsada_ranek  INT NOT NULL DEFAULT 3,
  utworzono     TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  zmodyfikowano TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  UNIQUE KEY uniq_miesiac (rok, miesiac)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_polish_ci;

-- ------------------------------------------------------------
-- Ręczne edycje komórek grafiku (nadpisania nad automatem)
-- Przechowujemy TYLKO ręczne zmiany; automat liczy się w locie.
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS edycje_komorek (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  grafik_id   INT NOT NULL,
  numer       INT NOT NULL,                       -- numerek pracownika
  dzien       INT NOT NULL,                        -- 1-31
  typ_zmiany  VARCHAR(6) NOT NULL,                 -- R,D,N,DM,DW10,DW8,...,W,Wn,U,Z
  FOREIGN KEY (grafik_id) REFERENCES grafiki(id) ON DELETE CASCADE,
  UNIQUE KEY uniq_komorka (grafik_id, numer, dzien)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_polish_ci;

-- ------------------------------------------------------------
-- Zaakceptowane dyżury wyrównawcze
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS wyrownawcze (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  grafik_id   INT NOT NULL,
  numer       INT NOT NULL,
  dzien       INT NOT NULL,
  typ_zmiany  VARCHAR(6) NOT NULL,                 -- DW10, DW8, ...
  FOREIGN KEY (grafik_id) REFERENCES grafiki(id) ON DELETE CASCADE,
  UNIQUE KEY uniq_wyr (grafik_id, numer, dzien)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_polish_ci;

-- ------------------------------------------------------------
-- Prośby grafikowe (per miesiąc)
-- typ: '*'=nie pracować, D/N/R=nie chcę danej zmiany, U=urlop
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS prosby (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  grafik_id   INT NOT NULL,
  numer       INT NOT NULL,
  dzien       INT NOT NULL,
  typ         VARCHAR(2) NOT NULL,                 -- *, D, N, R, U
  FOREIGN KEY (grafik_id) REFERENCES grafiki(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_polish_ci;

-- ============================================================
-- DANE STARTOWE
-- ============================================================
-- Domyślny administrator. UWAGA: hasło ustaw przez skrypt
-- config/utworz_admina.php (NIE wpisujemy hasła jawnie w SQL).
-- ============================================================
