CREATE TABLE IF NOT EXISTS Agence (
    numAgence INT PRIMARY KEY,
    telAgence VARCHAR(50),
    adAgence VARCHAR(100)
);

CREATE TABLE IF NOT EXISTS Agent (
    numAgent INT PRIMARY KEY,
    nomAgent VARCHAR(50),
    prenomAgent VARCHAR(50),
    salaire DECIMAL(10, 2),
    estDirecteur BOOLEAN,
    numAgence INT REFERENCES Agence(numAgence)
);

CREATE TABLE IF NOT EXISTS Client (
    numClient INT PRIMARY KEY,
    nomClient VARCHAR(50),
    prenomClient VARCHAR(50),
    adClient VARCHAR(100),
    dateNaissClient DATE,
    numAgent INT REFERENCES Agent(numAgent)
);

CREATE TABLE IF NOT EXISTS Compte (
    numCompte INT PRIMARY KEY,
    solde REAL,
    typeCompte VARCHAR(50)
);

CREATE TABLE IF NOT EXISTS Operation (
    numOperation INT PRIMARY KEY,
    dateOperation DATE,
    typeOperation VARCHAR(50),
    montant REAL,
    numCompte INT REFERENCES Compte(numCompte)
);

-- Creation Table Compte_Client
CREATE TABLE IF NOT EXISTS Compte_Client (
    numCompte INT CONSTRAINT fk_numCompte REFERENCES Compte(numCompte),
    numClient INT CONSTRAINT fk_numClient REFERENCES Client(numClient),
    CONSTRAINT pk_Compte_Client PRIMARY KEY (numCompte, numClient)
);

-- Exemple pour la table Client
-- Ajout de la colonne ageClient puis contraintes correspondantes
ALTER TABLE Client
    ADD COLUMN ageClient INT;

ALTER TABLE Client
    ALTER COLUMN nomClient SET NOT NULL,
    ALTER COLUMN prenomClient SET NOT NULL,
    ALTER COLUMN ageClient SET NOT NULL,
    ADD CONSTRAINT chk_age CHECK (ageClient >= 18);

-- Exemple pour la table Compte
ALTER TABLE Compte
    ADD CONSTRAINT ck_solde CHECK (solde >= 0);

-- Exemple pour la table Operation
ALTER TABLE Operation
    ADD CONSTRAINT chk_montant CHECK (montant >= 0);

-- Exemple pour la table Agence
ALTER TABLE Agence
    ADD CONSTRAINT unique_telAgence UNIQUE (telAgence);

-- Exemple pour la table Agent
ALTER TABLE Agent
    ALTER COLUMN estDirecteur SET DEFAULT false,
    ADD CONSTRAINT chk_salaire CHECK (salaire >= 0);

-- Colonnes obligatoires supplémentaires
ALTER TABLE Client
    ALTER COLUMN adClient SET NOT NULL,
    ALTER COLUMN dateNaissClient SET NOT NULL;

ALTER TABLE Agent
    ALTER COLUMN nomAgent SET NOT NULL,
    ALTER COLUMN prenomAgent SET NOT NULL;