 -- Création de la base de données FasCars
DROP DATABASE IF EXISTS FasCars;
CREATE DATABASE FasCars DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE FasCars;


-- Création de la table de la Marque des véhicules
CREATE TABLE Marque(
   idMarque INT AUTO_INCREMENT,
   nom VARCHAR(150),
   PRIMARY KEY(idMarque)
);

INSERT INTO Marque (nom) VALUES 
('Citroen'),
('Honda'),
('Ford'),
('Reault'),
('Peugeot'),
('Toyota');

-- Création de la table Modele des véhicules
CREATE TABLE Modele(
   idModele INT AUTO_INCREMENT,
   nom VARCHAR(150),
   idMarque INT NOT NULL,
   PRIMARY KEY(idModele),
   FOREIGN KEY(idMarque) REFERENCES Marque(idMarque)
);
INSERT INTO Modele (nom, idMarque) VALUES 
('Corolla', 6), 
('Civic', 2),  
('F-150', 3),
('Clio', 4),
('208', 5);  

-- Création de la table statut des véhicules 
CREATE TABLE Statut(
   idStatut INT AUTO_INCREMENT,
   Statut VARCHAR(50),
   PRIMARY KEY(IdStatut)
);

INSERT INTO Statut (Statut) VALUES 
('Disponible'),
('En location'),
('En réparation');


-- Création du type de véhicule
CREATE TABLE TypeVehicule (
    idTypeVehicule INT AUTO_INCREMENT,
    nomType VARCHAR(50),
    PRIMARY KEY(idTypeVehicule)
);

INSERT INTO TypeVehicule (nomType) VALUES 
('Berline'),
('Compacte'),
('SUV'),
('Monospace'),
('Coupé'),
('Cabriolet'),
('Utilitaire');


-- Création de la table véhicule
CREATE TABLE Vehicule(
   idVehicule INT AUTO_INCREMENT,
   idMarque INT NOT NULL,
   idModele INT NOT NULL,
   idTypeVehicule INT,
   Immat VARCHAR(100),
   annee DATE,
   motorisation VARCHAR(150),
   Couleur VARCHAR (50),
   kilometrage INT,
   Places INT,
   BoiteVitesse INT ,
   TarifJour DECIMAL(10, 2),
   niveauCarburant DECIMAL(5, 2),
   description VARCHAR(150),
   idStatut INT NOT NULL,
   PRIMARY KEY(idVehicule),
   FOREIGN KEY(idMarque) REFERENCES Marque(idMarque),
   FOREIGN KEY(idModele) REFERENCES Modele(idModele),
   FOREIGN KEY (idTypeVehicule) REFERENCES TypeVehicule (idTypeVehicule),
   FOREIGN KEY(idStatut) REFERENCES Statut(idStatut)
);

INSERT INTO Vehicule (idMarque, idModele, idTypeVehicule, Immat, annee, motorisation, Couleur, kilometrage, Places, BoiteVitesse, TarifJour, niveauCarburant, description, idStatut)VALUES 
(2, 2, 1, 'ABC123', '2022-02-02', 'Essence','bleu', 15000, 5, 5, 50.00, 100, 'Compacte idéale pour la ville', 1);

-- Création de la table PhotosVehicule
CREATE TABLE PhotosVehicule (
    idPhoto INT AUTO_INCREMENT PRIMARY KEY,
    idVehicule INT,
    nomPhoto VARCHAR(150),
    imageVehicule VARCHAR(250),
    FOREIGN KEY (idVehicule) REFERENCES Vehicule(idVehicule)
);
INSERT INTO PhotosVehicule (nomPhoto, idVehicule, imageVehicule) VALUES 
('HondaCivic', 1,  '/Api/Images/1_HondaCivic.jpeg' );



-- Creation de la table Assurance
CREATE TABLE Assurance (
   idAssurance INT AUTO_INCREMENT,
   nomAssurance VARCHAR(150),
   dateExpiration DATE,
   NumeroPolice VARCHAR(150),
   fraisAssurance DECIMAL(10, 2),
   contact VARCHAR (100),
   idVehicule INT ,
   PRIMARY KEY(IdAssurance),
   FOREIGN KEY(idVehicule) REFERENCES Vehicule(idVehicule)
);

INSERT INTO Assurance (nomAssurance, dateExpiration, NumeroPolice, fraisAssurance, contact, idVehicule) VALUES 
('Axa', '2025-04-14', 'A100263', 25.50,'Assurance1', 1);


-- Creation de la table Controle Technique
CREATE TABLE ControleTechnique (
   idControleTechnique INT AUTO_INCREMENT,
   nomControleTechnique VARCHAR(150),
   dateExpiration DATE,
   NumeroControle VARCHAR(150),
   fraisControle DECIMAL(10, 2),
   contact VARCHAR (100),
   idVehicule INT ,
   PRIMARY KEY(idControleTechnique),
   FOREIGN KEY(idVehicule) REFERENCES Vehicule(idVehicule)
);

INSERT INTO ControleTechnique (nomControleTechnique, dateExpiration, NumeroControle, fraisControle, contact, idVehicule ) VALUES 
('Controle', '2025-04-14', '13000004', 50.50, 'Controle', 1);




-- Création de la table Documents des véhicules
CREATE TABLE DocumentsVehicule(
   idDocumentVehicule INT AUTO_INCREMENT,
   NomDocumentVehicule VARCHAR(100),
   imageVehicule   VARCHAR(250),
   idVehicule INT,
   PRIMARY KEY(idDocumentVehicule),
   FOREIGN KEY(idVehicule) REFERENCES Vehicule(idVehicule)
);
INSERT INTO DocumentsVehicule (NomDocumentVehicule, imageVehicule, idVehicule) VALUES 
('Document1','/Api/Images/1_CarteGrise.jpg', 1), 
('Document2','/Api/Images/1_ControleTechnique.jpg', 1),
('Document3', '/Api/Images/1_Assurance.jpg', 1);


CREATE TABLE Genre (
	idGenre INT AUTO_INCREMENT,
	Genre VARCHAR(50),
	PRIMARY KEY (idGenre)
);
INSERT INTO Genre (Genre) VALUES 
('Mr'),
('Madame');

-- Table des clients
CREATE TABLE Clients (
   idClient INT AUTO_INCREMENT,
   nom VARCHAR(150),
   prenom VARCHAR(150),
   email VARCHAR(250),
   adresse VARCHAR(250),
   numeroTelephone VARCHAR(15),
   Ville VARCHAR (50),
   CodePostale VARCHAR(10),  
   idGenre INT,
   PRIMARY KEY(idClient),
   FOREIGN KEY (idGenre) REFERENCES Genre (idGenre)
);
-- Insertion des données dans la table Clients
INSERT INTO Clients (nom, prenom, idGenre, email, adresse, numeroTelephone, Ville, CodePostale) VALUES 
('Client', 'Client', 1, 'email@client.fr', 'rue du Client', '0707070707', 'Ville', 'CodePostale'),
('Client2', 'Client2', 2, 'email2@client.fr', 'rue du Client2', '0711111122', 'Ville', 'CodePostale');


-- Création de la table Etat des véhicules
CREATE TABLE Etat(
   idEtat INT AUTO_INCREMENT,
   idVehicule INT,
   checkIn DATETIME,
   checkOut DATETIME,
   nomDocument VARCHAR(100),
   imageEtat VARCHAR(200),
   airConditionne VARCHAR(50),
   pneus VARCHAR(50),
   carrosserie VARCHAR(50),
   moteur VARCHAR(50),
   idClient INT ,
   PRIMARY KEY(IdEtat),
   FOREIGN KEY (idVehicule) REFERENCES Vehicule(idVehicule),
   FOREIGN KEY (idClient) REFERENCES Clients (idClient)
);

-- Insertion des données dans la table Etat
INSERT INTO Etat (idVehicule, idClient, checkIn, checkOut, nomDocument, imageEtat, airConditionne, pneus, carrosserie, moteur)
VALUES (1, 1, '2024-04-14 09:00:00', '2024-04-15 12:00:00', 'CheckDoc', '/Api/Images/1_CheckDoc.jpeg', 'Bon', 'Bon', 'Bon', 'Bon');



-- Création de la table Documents des Clients
CREATE TABLE DocumentsClient(
   idDocumentClient INT AUTO_INCREMENT,
   NomDocumentClient VARCHAR (50),
   imageClient VARCHAR(250),
   idClient INT,
   PRIMARY KEY(idDocumentClient),
   FOREIGN KEY(idClient) REFERENCES Clients(idClient)
);
INSERT INTO DocumentsClient (NomDocumentClient, imageClient, idClient) VALUES 
('Carte identité', '/Api/Images/1_CI.jpg', 1), 
('Permis', '/Api/Images/1_Permis.jpg', 1);

CREATE TABLE Accidents (
    idAccident INT AUTO_INCREMENT PRIMARY KEY,
    NumeroConstat VARCHAR(15),
    Date DATE,
    idAssurance INT,
    idClient INT,
    idVehicule INT,
    imageConstat VARCHAR(250),
    FOREIGN KEY (idVehicule) REFERENCES Vehicule(idVehicule),
    FOREIGN KEY (idClient) REFERENCES Clients(idClient),
    FOREIGN KEY (idAssurance) REFERENCES Assurance(idAssurance)
);

-- Insertion des données dans la table Accidents
INSERT INTO Accidents (NumeroConstat, Date, idAssurance, idClient, idVehicule, imageConstat) VALUES 
('0001D', '2024-03-01', 1, 1, 1, '/Api/Images/1_Constat.jpg');


-- Table Infractions
CREATE TABLE Infractions (
    idInfraction INT AUTO_INCREMENT PRIMARY KEY,
    NumeroAmmende VARCHAR(15),
    Date DATE,
    idClient INT,
    idVehicule INT,
    Montant DECIMAL(10, 2),
    FOREIGN KEY (idVehicule) REFERENCES Vehicule(idVehicule),
    FOREIGN KEY (idClient) REFERENCES Clients(idClient)
);

-- Insertion des données dans la table Infractions
INSERT INTO Infractions (NumeroAmmende, Date, idClient, idVehicule, Montant) VALUES 
('0001A', '2024-03-01', 1, 1, 100.00);


-- Création de la table Supplements
CREATE TABLE Supplements (
   idSupplements INT AUTO_INCREMENT,
   nom VARCHAR(150),
   frais DECIMAL(10, 2),
   description VARCHAR(150),
   PRIMARY KEY(idSupplements)
);

-- Insertion des données dans la table Supplements
INSERT INTO Supplements (nom, frais, description) VALUES 
('Glacière', 10.00, 'Jour'),
('Siège enfant', 10.00, 'Jour'),
('Carburant', 200.00, 'Plein'),
('Gps', 10.00, 'Jour'),
('Depassement kilometrage', 0.40, 'kilometrage dépassement'),
('Livraison hors zone', 50, 'Aeroport' );

CREATE TABLE SupplementsVehicule (
   idSupplementsVehicule INT AUTO_INCREMENT,
   idSupplements INT,
   idVehicule INT,
   idClient INT,
   PRIMARY KEY(idSupplementsVehicule),
   FOREIGN KEY (idClient) REFERENCES Clients (idClient),
   FOREIGN KEY (idSupplements) REFERENCES Supplements(idSupplements),
   FOREIGN KEY (idVehicule) REFERENCES Vehicule(idVehicule)
);

INSERT INTO SupplementsVehicule (idSupplements, idVehicule, idClient) VALUES
(1, 1, 1),
(2, 1, 1),
(3, 1, 1);


-- Table des contrats de location
CREATE TABLE ContratsLocation (
   idContrat INT AUTO_INCREMENT,
   idVehicule INT,
   dateDebut DATETIME,
   dateFin DATETIME,
   idClient INT,
   montantTotal DECIMAL(10, 2),
   nombreJours INT,
   idEtat INT,
   PRIMARY KEY(idContrat),
   FOREIGN KEY(idClient) REFERENCES Clients(idClient),
   FOREIGN KEY(idVehicule) REFERENCES Vehicule(idVehicule),
   FOREIGN KEY (idEtat) REFERENCES Etat (idEtat)
);



INSERT INTO ContratsLocation (idVehicule, idClient, dateDebut, dateFin, montantTotal, nombreJours, idEtat)
VALUES
(1, 1, '2024-03-01 08:00:00', '2024-03-04 12:00:00', 450.00, 3, 1);



-- Table de la facturation
CREATE TABLE Facturation (
   idFacture INT AUTO_INCREMENT,
   idClient INT ,
   Montant DECIMAL(10, 2),
   DateFacturation DATE,
   Statut VARCHAR(50),
   PRIMARY KEY(idFacture),
FOREIGN KEY (idClient) REFERENCES Clients (idClient) 
);

-- Insertion des données de test
INSERT INTO Facturation ( idClient,  Montant, DateFacturation, Statut) VALUES
(1, 500.00, '2024-03-03', 'Régler'),
(2, 800.00, '2024-03-15', 'Acompte');
