-- Les pieces d'un bien.
--
-- Les colonnes de couchage sont fixes (lits_90, lits_140, lits_160,
-- canapes_lit) alors que les types de piece sont un referentiel configurable.
-- Ce n'est pas une incoherence : la liste des lits est stable et normalisee dans
-- la location saisonniere, et chaque type de lit implique une capacite differente,
-- donc de la logique. Un type de piece nouveau n'implique aucune logique.
-- Voir App\Domain\Couchage, qui porte la correspondance colonne / libelle /
-- capacite en un seul endroit.
--
-- Les champs douche / baignoire / WC et les couchages ne sont saisis que pour les
-- types marques est_chambre. Ils restent presents pour tous : mettre a zero ce qui
-- ne s'applique pas est plus simple qu'une seconde table, et une salle de bain qui
-- porterait un couchage ne casse rien.

CREATE TABLE pieces (
    id            BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    reference     CHAR(26)        NOT NULL,
    bien_id       BIGINT UNSIGNED NOT NULL,
    type_piece_id BIGINT UNSIGNED NOT NULL,

    -- Facultatif : « Chambre 1 », « Chambre des enfants ». Vide, l'affichage
    -- retombe sur le libelle du type.
    nom           VARCHAR(120)    NULL,
    surface_m2    DECIMAL(6,2)    UNSIGNED NULL,
    ordre         SMALLINT        NOT NULL DEFAULT 100,

    douche        TINYINT(1)      NOT NULL DEFAULT 0,
    baignoire     TINYINT(1)      NOT NULL DEFAULT 0,
    wc            TINYINT(1)      NOT NULL DEFAULT 0,

    lits_90       TINYINT UNSIGNED NOT NULL DEFAULT 0,
    lits_140      TINYINT UNSIGNED NOT NULL DEFAULT 0,
    lits_160      TINYINT UNSIGNED NOT NULL DEFAULT 0,
    canapes_lit   TINYINT UNSIGNED NOT NULL DEFAULT 0,

    cree_le       DATETIME        NOT NULL,
    modifie_le    DATETIME        NOT NULL,

    PRIMARY KEY (id),
    UNIQUE KEY uq_pieces_reference (reference),
    KEY idx_pieces_bien (bien_id, ordre, id),

    CONSTRAINT fk_pieces_bien
        FOREIGN KEY (bien_id) REFERENCES biens (id) ON DELETE CASCADE,

    -- RESTRICT et non CASCADE : supprimer un type de piece encore utilise doit
    -- echouer, pas emporter les pieces. C'est pourquoi l'interface desactive un
    -- type au lieu de le supprimer.
    CONSTRAINT fk_pieces_type
        FOREIGN KEY (type_piece_id) REFERENCES types_piece (id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
