-- ============================================================
-- Migrazione manuale per database già inizializzati
-- Eseguire se il volume MySQL esisteva prima dell'aggiornamento schema Academy.
-- ============================================================

USE `esameits24-26`;

-- Allinea enum ruoli utente (se la tabella esisteva con valori precedenti)
ALTER TABLE utente
  MODIFY Ruolo ENUM('Dipendente', 'Referente Academy') NOT NULL DEFAULT 'Dipendente';

UPDATE utente SET Ruolo = 'Referente Academy' WHERE Ruolo IN ('Amministratore', 'Refernete Academy');
UPDATE utente SET Ruolo = 'Dipendente' WHERE Ruolo = 'Operatore';

-- Catalogo corsi
CREATE TABLE IF NOT EXISTS corso (
  CorsoID       INT UNSIGNED  NOT NULL AUTO_INCREMENT,
  Titolo        VARCHAR(200)  NOT NULL,
  Descrizione   TEXT          NULL,
  Categoria     VARCHAR(100)  NOT NULL,
  DurataOre     SMALLINT UNSIGNED NOT NULL,
  Obbligatorio  TINYINT(1)    NOT NULL DEFAULT 0,
  Attivo        TINYINT(1)    NOT NULL DEFAULT 1,
  created_at    DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at    DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (CorsoID),
  KEY idx_corso_categoria (Categoria),
  KEY idx_corso_attivo (Attivo),
  CONSTRAINT chk_corso_durata_ore CHECK (DurataOre > 0)
) ENGINE=InnoDB
  DEFAULT CHARSET=utf8mb4
  COLLATE=utf8mb4_unicode_ci;

-- Assegnazioni corsi
CREATE TABLE IF NOT EXISTS assegnazione_corso (
  AssegnazioneID    INT UNSIGNED  NOT NULL AUTO_INCREMENT,
  CorsoID           INT UNSIGNED  NOT NULL,
  DipendenteID      INT UNSIGNED  NOT NULL,
  DataAssegnazione  DATE          NOT NULL,
  DataScadenza      DATE          NOT NULL,
  Stato             ENUM('Assegnato', 'Completato', 'Scaduto', 'Annullato') NOT NULL DEFAULT 'Assegnato',
  DataCompletamento DATE          NULL,
  created_at        DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at        DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (AssegnazioneID),
  KEY idx_assegnazione_corso (CorsoID),
  KEY idx_assegnazione_dipendente (DipendenteID),
  KEY idx_assegnazione_stato (Stato),
  KEY idx_assegnazione_data_assegnazione (DataAssegnazione),
  KEY idx_assegnazione_data_scadenza (DataScadenza),
  CONSTRAINT fk_assegnazione_corso
    FOREIGN KEY (CorsoID) REFERENCES corso (CorsoID)
    ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT fk_assegnazione_dipendente
    FOREIGN KEY (DipendenteID) REFERENCES utente (UtenteID)
    ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT chk_assegnazione_scadenza
    CHECK (DataScadenza >= DataAssegnazione),
  CONSTRAINT chk_assegnazione_completamento
    CHECK (DataCompletamento IS NULL OR DataCompletamento >= DataAssegnazione),
  CONSTRAINT chk_assegnazione_completato
    CHECK (
      (Stato = 'Completato' AND DataCompletamento IS NOT NULL)
      OR (Stato <> 'Completato' AND DataCompletamento IS NULL)
    )
) ENGINE=InnoDB
  DEFAULT CHARSET=utf8mb4
  COLLATE=utf8mb4_unicode_ci;
