-- Tarifs : le prix et la duree d'une prestation, pour un bien donne.
--
-- CETTE TABLE FAIT L'OFFRE. Une prestation tarifee sur un bien y est proposee ;
-- non tarifee, elle ne l'est pas. C'est ce qui donne au proprietaire une liste
-- unique dans son formulaire de demande, meme quand son bien releve de deux
-- concierges au catalogue different.
--
-- prix_cents en ENTIER, et jamais un DECIMAL ni un flottant. Un prix se compare, se
-- somme et se multiplie par une quantite ; le centime entier est la seule
-- representation qui ne derive pas. Le formatage en euros appartient a l'affichage.
--
-- unite porte le mode de facturation, ici et non sur le type : la meme « location de
-- draps » se facture au forfait sur un studio et par couchage sur un chalet de dix
-- lits. C'est un attribut du couple bien/prestation, donc du tarif.
--
-- duree_minutes vit ici pour la meme raison : un menage prend une heure trente dans
-- un T2 et trois heures dans un chalet. C'est cette valeur que le concierge retrouve
-- pre-remplie a la validation d'une intervention.

CREATE TABLE tarifs (
    id                  BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    reference           CHAR(26)        NOT NULL,
    bien_id             BIGINT UNSIGNED NOT NULL,
    type_prestation_id  BIGINT UNSIGNED NOT NULL,

    prix_cents          INT UNSIGNED    NOT NULL,
    unite               ENUM('forfait','couchage','heure') NOT NULL DEFAULT 'forfait',
    duree_minutes       SMALLINT UNSIGNED NULL,

    actif               TINYINT(1)      NOT NULL DEFAULT 1,
    cree_le             DATETIME        NOT NULL,
    modifie_le          DATETIME        NOT NULL,

    PRIMARY KEY (id),
    UNIQUE KEY uq_tarifs_reference (reference),

    -- Un seul tarif par couple bien/prestation. Deux prix concurrents pour la meme
    -- chose sur le meme bien seraient une source de litige, pas une souplesse.
    UNIQUE KEY uq_tarifs_bien_prestation (bien_id, type_prestation_id),
    KEY idx_tarifs_bien (bien_id, actif),

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

    -- RESTRICT : retirer un type du catalogue ne doit pas effacer silencieusement les
    -- prix negocies. L'interface desactive, elle ne supprime pas.
    CONSTRAINT fk_tarifs_type
        FOREIGN KEY (type_prestation_id) REFERENCES types_prestation (id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
