-- Table: Artysta
CREATE TABLE Artysta (
    ID_Artysta varchar(7)  NOT NULL,
    imie varchar(50)  NOT NULL,
    nazwisko varchar(75)  NOT NULL,
    rok_urodzenia int  NOT NULL,
    rok_smierci int  NULL,
    CONSTRAINT Artysta_pk PRIMARY KEY (ID_Artysta)
);

-- Table: Eksponat
CREATE TABLE Eksponat (
    ID_Eksponat varchar(7)  NOT NULL,
    tytul varchar(150)  NOT NULL,
    typ varchar(50)  NOT NULL,
    wysokosc_cm numeric(100,2)  NOT NULL,
    szerokosc_cm numeric(100,2)  NOT NULL,
    waga_kg numeric(10,2)  NOT NULL,
    ID_Artysta varchar(7)  NULL,
    czy_mozna_wypozyczyc boolean  NOT NULL,
    CONSTRAINT Eksponat_pk PRIMARY KEY (ID_Eksponat)
);

-- Table: Galeria
CREATE TABLE Galeria (
    ID_Galeria varchar(7)  NOT NULL,
    nazwa varchar(200)  NOT NULL,
    adres varchar(400)  NOT NULL,
    CONSTRAINT Galeria_pk PRIMARY KEY (ID_Galeria)
);

-- Table: Historia_Eksponatu
CREATE TABLE Historia_Eksponatu (
    ID_Historia varchar(7)  NOT NULL,
    ID_Galeria varchar(7)  NULL,
    ID_Instytucja varchar(7)  NULL,
    ID_sala varchar(7)  NULL,
    ID_Eksponat varchar(7)  NOT NULL,
    data_rozpoczecia date  NOT NULL,
    data_zakonczenia date  NULL,
    dni_wypozyczenia int  NOT NULL,
    CONSTRAINT CHECK_0 CHECK (( dni_wypozyczenia <= 30 AND dni_wypozyczenia >= 0 )) NOT DEFERRABLE INITIALLY IMMEDIATE,
    CONSTRAINT Historia_Eksponatu_pk PRIMARY KEY (ID_Historia)
);

-- Table: Instytucja
CREATE TABLE Instytucja (
    ID_Instytucja varchar(7)  NOT NULL,
    nazwa varchar(200)  NOT NULL,
    miasto varchar(50)  NOT NULL,
    CONSTRAINT Instytucja_pk PRIMARY KEY (ID_Instytucja)
);

-- foreign keys
-- Reference: Artysta_Eksponat (table: Eksponat)
ALTER TABLE Eksponat ADD CONSTRAINT Artysta_Eksponat
    FOREIGN KEY (ID_Artysta)
    REFERENCES Artysta (ID_Artysta)  
    NOT DEFERRABLE 
    INITIALLY IMMEDIATE
;

-- Reference: Eksponat_Historia_Eksponatu (table: Historia_Eksponatu)
ALTER TABLE Historia_Eksponatu ADD CONSTRAINT Eksponat_Historia_Eksponatu
    FOREIGN KEY (ID_Eksponat)
    REFERENCES Eksponat (ID_Eksponat)  
    NOT DEFERRABLE 
    INITIALLY IMMEDIATE
;

-- Reference: Historia_Eksponatu_Galeria (table: Historia_Eksponatu)
ALTER TABLE Historia_Eksponatu ADD CONSTRAINT Historia_Eksponatu_Galeria
    FOREIGN KEY (ID_Galeria)
    REFERENCES Galeria (ID_Galeria)  
    NOT DEFERRABLE 
    INITIALLY IMMEDIATE
;

-- Reference: Instytucja_Historia_Eksponatu (table: Historia_Eksponatu)
ALTER TABLE Historia_Eksponatu ADD CONSTRAINT Instytucja_Historia_Eksponatu
    FOREIGN KEY (ID_Instytucja)
    REFERENCES Instytucja (ID_Instytucja)  
    NOT DEFERRABLE 
    INITIALLY IMMEDIATE
;

DELIMITER $$

CREATE PROCEDURE DodajEksponat (
    IN p_ID_Eksponat VARCHAR(7),
    IN p_tytul VARCHAR(150),
    IN p_typ VARCHAR(50),
    IN p_wysokosc_cm NUMERIC(100,2),
    IN p_szerokosc_cm NUMERIC(100,2),
    IN p_waga_kg NUMERIC(10,2),
    IN p_ID_Artysta VARCHAR(7),
    IN p_czy_mozna_wypozyczyc BOOLEAN
)
BEGIN
    -- Wstawienie nowego eksponatu do tabeli Eksponat
    INSERT INTO Eksponat (
        ID_Eksponat, tytul, typ, wysokosc_cm, szerokosc_cm, waga_kg, ID_Artysta, czy_mozna_wypozyczyc
    )
    VALUES (
        p_ID_Eksponat, p_tytul, p_typ, p_wysokosc_cm, p_szerokosc_cm, p_waga_kg, p_ID_Artysta, p_czy_mozna_wypozyczyc
    );
END$$

DELIMITER ;

