-- Création

create schema if not exists recettes;
set search_path to recettes;

CREATE TYPE niveau_difficulte AS ENUM ('Facile', 'Moyen', 'Difficile');

-- Table Recette
CREATE TABLE Recette
(
    id_recette        INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    nom               VARCHAR(100)      NOT NULL,
    description       TEXT,
    temps_preparation INT               NOT NULL,
    temps_cuisson     INT               NOT NULL,
    difficulte        niveau_difficulte NOT NULL,
    nombre_portions   INT               NOT NULL,
    date_creation     TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Table Ingredient
CREATE TABLE Ingredient
(
    id_ingredient INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    nom           VARCHAR(50) UNIQUE NOT NULL,
    unite_mesure  VARCHAR(20)        NOT NULL
);

-- Table Etape
CREATE TABLE Etape
(
    id_etape        INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    id_recette      INT  NOT NULL,
    etape_parent_id INT,
    numero_etape    INT  NOT NULL,
    description     TEXT NOT NULL,
    FOREIGN KEY (id_recette) REFERENCES Recette (id_recette) ON DELETE CASCADE,
    FOREIGN KEY (etape_parent_id) REFERENCES Etape (id_etape) ON DELETE CASCADE,
    UNIQUE (id_recette, etape_parent_id, numero_etape)
);

-- Table Commentaire
CREATE TABLE Commentaire
(
    id_commentaire INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    id_recette     INT  NOT NULL,
    id_utilisateur INT  NOT NULL,
    contenu        TEXT NOT NULL,
    date_creation  TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_recette) REFERENCES Recette (id_recette) ON DELETE CASCADE,
    FOREIGN KEY (id_utilisateur) REFERENCES Utilisateur (id_utilisateur) ON DELETE CASCADE
);

-- Table Note
CREATE TABLE Note
(
    id_note        INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    id_recette     INT NOT NULL,
    id_utilisateur INT NOT NULL,
    valeur         INT NOT NULL CHECK (valeur BETWEEN 1 AND 5),
    date_creation  TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_recette) REFERENCES Recette (id_recette) ON DELETE CASCADE,
    FOREIGN KEY (id_utilisateur) REFERENCES Utilisateur (id_utilisateur) ON DELETE CASCADE,
    UNIQUE (id_recette, id_utilisateur)
);

-- Table RecetteIngredient
CREATE TABLE RecetteIngredient
(
    id_recette_ingredient INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    id_recette            INT   NOT NULL,
    id_ingredient         INT   NOT NULL,
    quantite              FLOAT NOT NULL,
    FOREIGN KEY (id_recette) REFERENCES Recette (id_recette) ON DELETE CASCADE,
    FOREIGN KEY (id_ingredient) REFERENCES Ingredient (id_ingredient) ON DELETE RESTRICT,
    UNIQUE (id_recette, id_ingredient)
);

-- Table RecetteAuteur
CREATE TABLE RecetteAuteur
(
    id_recette_auteur INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    id_recette        INT NOT NULL,
    id_utilisateur    INT NOT NULL,
    FOREIGN KEY (id_recette) REFERENCES Recette (id_recette) ON DELETE CASCADE,
    FOREIGN KEY (id_utilisateur) REFERENCES Utilisateur (id_utilisateur) ON DELETE CASCADE,
    UNIQUE (id_recette, id_utilisateur)
);

-- Recette
INSERT INTO Recette (nom, description, temps_preparation, temps_cuisson, difficulte, nombre_portions, date_creation)
VALUES ('Quiche Lorraine', 'Une délicieuse quiche traditionnelle', 20, 35, 'Facile', 6, '2023-01-15 10:30:00'),
       ('Ratatouille', 'Un plat végétarien provençal', 30, 45, 'Moyen', 4, '2023-02-20 14:45:00'),
       ('Tarte aux pommes', 'Un classique de la pâtisserie française', 25, 40, 'Facile', 8, '2023-03-10 09:15:00'),
       ('Coq au vin', 'Un plat traditionnel français', 40, 90, 'Difficile', 6, '2023-04-05 18:20:00'),
       ('Salade Niçoise', 'Une salade fraîche et colorée', 20, 0, 'Facile', 4, '2023-05-12 12:00:00'),
       ('Pad Thai', 'Nouilles de riz sautées avec crevettes et cacahuètes', 20, 10, 'Moyen', 2, '2023-06-10 11:30:00'),
       ('Tom Yum Goong', 'Soupe épicée aux crevettes', 15, 20, 'Facile', 4, '2023-06-15 14:45:00'),
       ('Som Tam', 'Salade de papaye verte épicée', 20, 0, 'Facile', 2, '2023-06-20 10:00:00'),
       ('Massaman Curry', 'Curry doux au bœuf et aux pommes de terre', 30, 90, 'Difficile', 6, '2023-06-25 18:20:00');

-- Ingredient
INSERT INTO Ingredient (nom, unite_mesure)
VALUES ('Farine', 'g'),
       ('Oeufs', 'unité'),
       ('Lait', 'ml'),
       ('Lardons', 'g'),
       ('Aubergine', 'unité'),
       ('Courgette', 'unité'),
       ('Tomate', 'unité'),
       ('Pomme', 'unité'),
       ('Sucre', 'g'),
       ('Cannelle', 'cuillère à café'),
       ('Poulet', 'g'),
       ('Vin rouge', 'ml'),
       ('Thon', 'g'),
       ('Olive', 'g'),
       ('Sel', 'pincée'),
       ('Poivre', 'pincée'),
       ('Nouilles de riz', 'g'),
       ('Crevettes', 'g'),
       ('Cacahuètes', 'g'),
       ('Citronnelle', 'tige'),
       ('Piment', 'unité'),
       ('Papaye verte', 'unité'),
       ('Bœuf', 'g'),
       ('Lait de coco', 'ml'),
       ('Sauce poisson', 'ml'),
       ('Citron vert', 'unité');

-- Etape
INSERT INTO Etape (id_recette, etape_parent_id, numero_etape, description)
VALUES (1, NULL, 1, 'Préparer la pâte brisée'),
       (1, NULL, 2, 'Faire revenir les lardons'),
       (1, NULL, 3, 'Mélanger les œufs et le lait'),
       (1, NULL, 4, 'Assembler la quiche et cuire'),
       (2, NULL, 1, 'Couper les légumes en dés'),
       (2, NULL, 2, 'Faire revenir l''oignon et l''ail'),
       (2, NULL, 3, 'Ajouter les légumes et mijoter'),
       (2, NULL, 4, 'Assaisonner et servir'),
       (3, NULL, 1, 'Préparer la pâte'),
       (3, NULL, 2, 'Éplucher et couper les pommes'),
       (3, NULL, 3, 'Disposer les pommes sur la pâte'),
       (3, NULL, 4, 'Saupoudrer de sucre et de cannelle'),
       (3, NULL, 5, 'Cuire au four'),
       (4, NULL, 1, 'Mariner le poulet dans le vin'),
       (4, NULL, 2, 'Faire revenir les lardons'),
       (4, NULL, 3, 'Cuire le poulet'),
       (4, NULL, 4, 'Ajouter les champignons et mijoter'),
       (5, NULL, 1, 'Cuire les œufs durs'),
       (5, NULL, 2, 'Couper les légumes'),
       (5, NULL, 3, 'Disposer tous les ingrédients'),
       (5, NULL, 4, 'Assaisonner et servir'),
       (6, NULL, 1, 'Faire tremper les nouilles de riz'),
       (6, NULL, 2, 'Préparer la sauce Pad Thai'),
       (6, NULL, 3, 'Faire sauter les crevettes'),
       (6, NULL, 4, 'Ajouter les nouilles et la sauce, puis faire sauter'),
       (6, NULL, 5, 'Garnir de cacahuètes concassées'),
       (7, NULL, 1, 'Préparer le bouillon de crevettes'),
       (7, NULL, 2, 'Ajouter la citronnelle et les piments'),
       (7, NULL, 3, 'Cuire les crevettes dans le bouillon'),
       (7, NULL, 4, 'Assaisonner avec du jus de citron vert et de la sauce poisson'),
       (8, NULL, 1, 'Râper la papaye verte'),
       (8, NULL, 2, 'Préparer la vinaigrette épicée'),
       (8, NULL, 3, 'Mélanger la papaye avec la vinaigrette'),
       (8, NULL, 4, 'Ajouter les tomates cerises et les cacahuètes'),
       (9, NULL, 1, 'Faire mariner le bœuf'),
       (9, NULL, 2, 'Préparer la pâte de curry Massaman'),
       (9, NULL, 3, 'Faire revenir la pâte de curry dans le lait de coco'),
       (9, NULL, 4, 'Ajouter le bœuf et les pommes de terre, puis mijoter');

-- Ajout de quelques sous-étapes pour démontrer la hiérarchie
INSERT INTO Etape (id_recette, etape_parent_id, numero_etape, description)
VALUES (1, 1, 1, 'Mélanger la farine et le beurre'),
       (1, 1, 2, 'Ajouter l''eau froide et pétrir'),
       (3, 2, 1, 'Laver les pommes'),
       (3, 2, 2, 'Retirer les pépins');

-- Commentaire
INSERT INTO Commentaire (id_recette, id_utilisateur, contenu, date_creation)
VALUES (1, 2, 'Excellente recette, toute la famille a adoré !', '2023-01-20 15:30:00'),
       (1, 3, 'Simple à faire et délicieux.', '2023-01-22 10:15:00'),
       (2, 1, 'Un peu long à préparer mais le résultat en vaut la peine.', '2023-02-25 18:45:00'),
       (3, 4, 'Ma tarte préférée, merci pour la recette !', '2023-03-15 20:00:00'),
       (4, 5, 'Un vrai régal, je recommande.', '2023-04-10 13:30:00'),
       (5, 1, 'Parfait pour l''été, frais et léger.', '2023-05-15 12:45:00'),
       (6, 6, 'Délicieux Pad Thai, presque comme à Bangkok !', '2023-06-12 20:30:00'),
       (7, 7, 'Cette soupe est parfaite pour les jours froids.', '2023-06-18 19:15:00'),
       (8, 1, 'Très rafraîchissant, mais attention, c''est vraiment épicé !', '2023-06-22 13:00:00'),
       (9, 2, 'Un curry doux et savoureux, toute la famille a adoré.', '2023-06-28 21:45:00');

-- Note
INSERT INTO Note (id_recette, id_utilisateur, valeur, date_creation)
VALUES (1, 2, 5, '2023-01-20 15:35:00'),
       (1, 3, 4, '2023-01-22 10:20:00'),
       (2, 1, 4, '2023-02-25 18:50:00'),
       (2, 4, 5, '2023-02-26 09:15:00'),
       (3, 4, 5, '2023-03-15 20:05:00'),
       (3, 5, 4, '2023-03-16 11:30:00'),
       (4, 5, 5, '2023-04-10 13:35:00'),
       (5, 1, 4, '2023-05-15 12:50:00'),
       (6, 6, 5, '2023-06-12 20:35:00'),
       (6, 7, 4, '2023-06-13 12:20:00'),
       (7, 7, 5, '2023-06-18 19:20:00'),
       (7, 1, 4, '2023-06-19 10:15:00'),
       (8, 1, 5, '2023-06-22 13:05:00'),
       (8, 2, 4, '2023-06-23 18:30:00'),
       (9, 2, 5, '2023-06-28 21:50:00'),
       (9, 6, 5, '2023-06-29 14:10:00');

-- RecetteIngredient
INSERT INTO RecetteIngredient (id_recette, id_ingredient, quantite)
VALUES (1, 1, 200),   -- Farine pour Quiche Lorraine
       (1, 2, 3),     -- Oeufs pour Quiche Lorraine
       (1, 3, 200),   -- Lait pour Quiche Lorraine
       (1, 4, 150),   -- Lardons pour Quiche Lorraine
       (2, 5, 1),     -- Aubergine pour Ratatouille
       (2, 6, 2),     -- Courgette pour Ratatouille
       (2, 7, 4),     -- Tomate pour Ratatouille
       (3, 1, 250),   -- Farine pour Tarte aux pommes
       (3, 8, 6),     -- Pomme pour Tarte aux pommes
       (3, 9, 100),   -- Sucre pour Tarte aux pommes
       (3, 10, 1),    -- Cannelle pour Tarte aux pommes
       (4, 11, 1000), -- Poulet pour Coq au vin
       (4, 12, 500),  -- Vin rouge pour Coq au vin
       (4, 4, 100),   -- Lardons pour Coq au vin
       (5, 13, 200),  -- Thon pour Salade Niçoise
       (5, 14, 50),   -- Olive pour Salade Niçoise
       (5, 2, 2),    -- Oeufs pour Salade Niçoise
       (6, 17, 200), -- Nouilles de riz pour Pad Thai
       (6, 18, 150), -- Crevettes pour Pad Thai
       (6, 19, 50),  -- Cacahuètes pour Pad Thai
       (7, 18, 200), -- Crevettes pour Tom Yum Goong
       (7, 20, 2),   -- Citronnelle pour Tom Yum Goong
       (7, 21, 3),   -- Piment pour Tom Yum Goong
       (8, 22, 1),   -- Papaye verte pour Som Tam
       (8, 21, 2),   -- Piment pour Som Tam
       (8, 19, 30),  -- Cacahuètes pour Som Tam
       (9, 23, 500), -- Bœuf pour Massaman Curry
       (9, 24, 400), -- Lait de coco pour Massaman Curry
       (9, 25, 30),  -- Sauce poisson pour Massaman Curry
       (9, 26, 2);   -- Citron vert pour Massaman Curry

-- RecetteAuteur
INSERT INTO RecetteAuteur (id_recette, id_utilisateur)
VALUES (1, 1),
       (2, 2),
       (3, 3),
       (4, 4),
       (5, 5),
       (6, 6),
       (7, 7),
       (8, 6),
       (9, 7);

