CREATE DATABASE IF NOT EXISTS practica CHARACTER SET utf8;

CREATE USER IF NOT EXISTS practica IDENTIFIED BY 'practica';

GRANT USAGE ON *.* TO practica@localhost IDENTIFIED BY 'practica';

GRANT ALL PRIVILEGES ON practica.* TO practica@localhost;

USE practica;

CREATE TABLE IF NOT EXISTS paciente (
       nombre VARCHAR(50) NOT NULL,
       apellido VARCHAR(50) NOT NULL,
       fecha_de_nacimiento DATE NOT NULL,
       documento_identificativo VARCHAR(50) PRIMARY KEY,
       tipo_documento VARCHAR(10) NOT NULL,
       dirección VARCHAR(255) NOT NULL,
       localidad VARCHAR(100) NOT NULL,
       provincia VARCHAR(50) NOT NULL,
       pais VARCHAR(100) NOT NULL
);


CREATE TABLE IF NOT EXISTS rol(
       codigo INT PRIMARY KEY,
       nombre VARCHAR(25) NOT NULL
);

CREATE TABLE IF NOT EXISTS usuario(
       nombre VARCHAR(50) NOT NULL,
       usuario VARCHAR(50) PRIMARY KEY,
       contraseña VARCHAR(100) NOT NULL,
       rol INT NOT NULL,
       especialidad VARCHAR(50),
       correo VARCHAR(100),
       fecha_alta DATE NOT NULL,
       fecha_baja DATE,
       FOREIGN KEY (rol)
       REFERENCES rol(codigo)
);


CREATE TABLE IF NOT EXISTS festivos (
       fecha_festivo DATE NOT NULL,
       tipo_festivo VARCHAR(15) NOT NULL,
       medico VARCHAR(50),
       FOREIGN KEY (medico)
       REFERENCES usuario(usuario)
);

CREATE TABLE IF NOT EXISTS calendario (
       id INT NOT NULL,
       hora_inicio_mañana TIME,
       hora_fin_mañana TIME,
       hora_inicio_tarde TIME,
       hora_fin_tarde TIME,
       horario VARCHAR(15) NOT NULL,
       sabado_habil BOOLEAN,
       domingo_habil BOOLEAN,
       duracion_cita_por_defecto INT,
       medico VARCHAR(50),
       PRIMARY KEY (id, medico),
       FOREIGN KEY (medico)
       REFERENCES usuario(usuario)
);

CREATE TABLE IF NOT EXISTS cita(
       id INT NOT NULL,
       fecha DATE NOT NULL,
       hora TIME NOT NULL,
       duracion INT,
       medico VARCHAR(50) NOT NULL,
       observaciones VARCHAR(255),
       paciente VARCHAR(50),
       PRIMARY KEY (id, medico),
       FOREIGN KEY (medico)
       REFERENCES usuario(usuario),
       FOREIGN KEY (paciente)
       REFERENCES paciente(documento_identificativo)
);

CREATE TABLE IF NOT EXISTS informe(
       id INT NOT NULL,
       fecha DATE NOT NULL,
       hora TIME NOT NULL,
       paciente VARCHAR(50) NOT NULL,
       titulo VARCHAR(100) NOT NULL,
       contenido VARCHAR(255) NOT NULL,
       medico VARCHAR(50) NOT NULL,
       PRIMARY KEY (id, paciente),
       FOREIGN KEY (medico)
       REFERENCES usuario(usuario),
       FOREIGN KEY (paciente)
       REFERENCES paciente(documento_identificativo)
);
