USE provapratica;

CREATE TABLE IF NOT EXISTS utenti (
  utente_id       INT UNSIGNED      NOT NULL AUTO_INCREMENT,
  nome            VARCHAR(100)      NOT NULL,
  cognome         VARCHAR(100)      NOT NULL,
  email           VARCHAR(255)      NOT NULL,
  password_hash   VARCHAR(255)      NOT NULL,
  ruolo           ENUM('DIPENDENTE', 'RESPONSABILE_AMMINISTRATIVO') NOT NULL DEFAULT 'DIPENDENTE',
  created_at      DATETIME          NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at      DATETIME          NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (utente_id),
  UNIQUE KEY uk_utenti_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS categorie_spesa (
  categoria_id    INT UNSIGNED      NOT NULL AUTO_INCREMENT,
  descrizione     VARCHAR(150)      NOT NULL,
  PRIMARY KEY (categoria_id),
  UNIQUE KEY uk_categorie_spesa_descrizione (descrizione)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS richieste_rimborso (
  richiesta_id                INT UNSIGNED      NOT NULL AUTO_INCREMENT,
  data_inserimento            DATETIME          NOT NULL DEFAULT CURRENT_TIMESTAMP,
  data_spesa                  DATE              NOT NULL,
  categoria_id                INT UNSIGNED      NOT NULL,
  importo                     DECIMAL(10, 2)    NOT NULL,
  descrizione                 VARCHAR(500)      NOT NULL,
  riferimento_giustificativo  VARCHAR(255)      NULL,
  stato                       ENUM('IN_ATTESA', 'APPROVATA', 'RIFIUTATA', 'LIQUIDATA') NOT NULL DEFAULT 'IN_ATTESA',
  dipendente_id               INT UNSIGNED      NOT NULL,
  data_valutazione            DATETIME          NULL,
  responsabile_valutazione_id INT UNSIGNED      NULL,
  motivazione_rifiuto         VARCHAR(500)      NULL,
  data_liquidazione           DATETIME          NULL,
  PRIMARY KEY (richiesta_id),
  CONSTRAINT fk_richieste_categoria FOREIGN KEY (categoria_id) REFERENCES categorie_spesa (categoria_id),
  CONSTRAINT fk_richieste_dipendente FOREIGN KEY (dipendente_id) REFERENCES utenti (utente_id),
  CONSTRAINT fk_richieste_responsabile FOREIGN KEY (responsabile_valutazione_id) REFERENCES utenti (utente_id),
  CONSTRAINT chk_richieste_importo_positivo CHECK (importo > 0)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
