-- Tabella per le Strutture (Sedi dell'asilo nido)
CREATE TABLE structures (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL COMMENT 'Nome della struttura',
    address VARCHAR(255) NULL COMMENT 'Indirizzo',
    city VARCHAR(100) NULL COMMENT 'Città',
    province VARCHAR(100) NULL COMMENT 'Provincia',
    zip_code VARCHAR(10) NULL COMMENT 'CAP',
    phone VARCHAR(50) NULL COMMENT 'Numero di telefono',
    email VARCHAR(255) NULL COMMENT 'Indirizzo email',
    notes TEXT NULL COMMENT 'Note aggiuntive',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Tabella per gli Insegnanti
CREATE TABLE teachers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(100) NOT NULL COMMENT 'Nome',
    last_name VARCHAR(100) NOT NULL COMMENT 'Cognome',
    email VARCHAR(255) UNIQUE NULL COMMENT 'Email (opzionale, ma unica se presente)',
    phone VARCHAR(50) NULL COMMENT 'Telefono',
    date_of_birth DATE NULL COMMENT 'Data di nascita',
    hire_date DATE NULL COMMENT 'Data di assunzione',
    qualifications TEXT NULL COMMENT 'Qualifiche o note',
    is_active BOOLEAN DEFAULT true COMMENT 'Indica se l''insegnante è attualmente attivo',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- Tabella per gli Anni Scolastici
CREATE TABLE school_years (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL UNIQUE COMMENT 'Nome anno scolastico (es. 2024/2025)',
    start_date DATE NOT NULL COMMENT 'Data inizio anno scolastico',
    end_date DATE NOT NULL COMMENT 'Data fine anno scolastico',
    is_active BOOLEAN DEFAULT false COMMENT 'Indica se è l''anno scolastico corrente/attivo',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    CONSTRAINT chk_dates CHECK (end_date > start_date) -- Assicura che la fine sia dopo l'inizio
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- Tabella per i Contratti degli Insegnanti
CREATE TABLE teacher_contracts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    teacher_id INT NOT NULL COMMENT 'FK a teachers',
    school_year_id INT NOT NULL COMMENT 'FK a school_years',
    structure_id INT NULL COMMENT 'FK a structures (opzionale, se il contratto è specifico per una struttura)',
    contract_type VARCHAR(100) NULL COMMENT 'Tipo di contratto (es. Tempo Indeterminato, Tempo Determinato, Collaborazione)',
    start_date DATE NOT NULL COMMENT 'Data inizio validità contratto',
    end_date DATE NULL COMMENT 'Data fine validità contratto (NULL se indeterminato)',
    weekly_hours DECIMAL(5, 2) NULL COMMENT 'Ore settimanali previste',
    salary DECIMAL(10, 2) NULL COMMENT 'Stipendio lordo (mensile/annuale a seconda delle policy)',
    notes TEXT NULL COMMENT 'Note aggiuntive sul contratto',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (teacher_id) REFERENCES teachers(id) ON DELETE CASCADE, -- Se elimino un insegnante, elimino i suoi contratti
    FOREIGN KEY (school_year_id) REFERENCES school_years(id) ON DELETE RESTRICT, -- Non posso eliminare un anno scolastico se ha contratti
    FOREIGN KEY (structure_id) REFERENCES structures(id) ON DELETE SET NULL, -- Se elimino una struttura, il contratto rimane ma senza struttura associata
    UNIQUE KEY unique_teacher_year (teacher_id, school_year_id) -- Un insegnante può avere un solo contratto per anno scolastico? (Da valutare)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Tabella per i Bambini
CREATE TABLE children (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(100) NOT NULL COMMENT 'Nome',
    last_name VARCHAR(100) NOT NULL COMMENT 'Cognome',
    date_of_birth DATE NOT NULL COMMENT 'Data di nascita',
    enrollment_date DATE NOT NULL COMMENT 'Data di iscrizione',
    structure_id INT NULL COMMENT 'FK a structures (struttura di appartenenza principale)',
    parent1_name VARCHAR(200) NULL COMMENT 'Nome Genitore 1 / Contatto Principale',
    parent1_phone VARCHAR(50) NULL COMMENT 'Telefono Genitore 1',
    parent1_email VARCHAR(255) NULL COMMENT 'Email Genitore 1',
    parent2_name VARCHAR(200) NULL COMMENT 'Nome Genitore 2 / Contatto Secondario',
    parent2_phone VARCHAR(50) NULL COMMENT 'Telefono Genitore 2',
    parent2_email VARCHAR(255) NULL COMMENT 'Email Genitore 2',
    address VARCHAR(255) NULL COMMENT 'Indirizzo residenza',
    city VARCHAR(100) NULL COMMENT 'Città residenza',
    notes TEXT NULL COMMENT 'Note (allergie, esigenze particolari, etc.)',
    is_active BOOLEAN DEFAULT true COMMENT 'Indica se l''iscrizione è attualmente attiva',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (structure_id) REFERENCES structures(id) ON DELETE SET NULL -- Se elimino struttura, il bambino rimane ma senza struttura
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- Tabella per le Definizioni dei Turni Standard
CREATE TABLE shift_definitions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL UNIQUE COMMENT 'Nome del turno (es. Mattina, Pomeriggio)',
    start_time TIME NOT NULL COMMENT 'Orario di inizio previsto',
    end_time TIME NOT NULL COMMENT 'Orario di fine previsto',
    notes TEXT NULL COMMENT 'Note aggiuntive',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    -- Potremmo aggiungere un flag 'is_default' o 'is_active' se necessario
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- Tabella per gli Utenti (Admin, Operator)
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL COMMENT 'Nome e Cognome utente',
    email VARCHAR(255) NOT NULL UNIQUE COMMENT 'Email per login',
    password VARCHAR(255) NOT NULL COMMENT 'Password hashata',
    role ENUM('admin', 'operator') NOT NULL DEFAULT 'operator' COMMENT 'Ruolo utente',
    structure_id INT NULL COMMENT 'FK a structures (se operatore è legato a una struttura specifica)',
    is_active BOOLEAN DEFAULT true,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (structure_id) REFERENCES structures(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


-- Aggiungi qui le altre tabelle (actual_shifts, etc.)
-- man mano che le definiamo.
-- Aggiungi qui le altre tabelle (children, shifts, users, etc.)
-- man mano che le definiamo.