CREATE TYPE role AS ENUM ('estudiante', 'profesor', 'admin');

CREATE TABLE usuarios (
  id_usuario INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  email VARCHAR(255) UNIQUE NOT NULL,
  nombre VARCHAR(255) NOT NULL,
  apellido1 VARCHAR(255),
  apellido2 VARCHAR(255),
  password VARCHAR(255) NOT NULL,
  rol role NOT NULL
);

CREATE TABLE cuestionarios (
  id_cuestionario INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  id_usuario INT NOT NULL,
  titulo VARCHAR(255) NOT NULL,
  descripcion VARCHAR(255),
  CONSTRAINT fk_usuario FOREIGN KEY(id_usuario) REFERENCES USUARIOS(id_usuario)
);

CREATE TABLE preguntas (
  id_pregunta INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  id_cuestionario INT NOT NULL,
  enunciado VARCHAR(255) NOT NULL,
  CONSTRAINT fk_cuestionario FOREIGN KEY(id_cuestionario) REFERENCES CUESTIONARIOS(id_cuestionario)
);

CREATE TABLE respuestas (
  id_respuesta INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  id_pregunta INT NOT NULL,
  respuesta VARCHAR(255) NOT NULL,
  es_verdadera BOOLEAN NOT NULL,
  CONSTRAINT fk_pregunta FOREIGN KEY(id_pregunta) REFERENCES PREGUNTAS(id_pregunta)
);

CREATE TABLE juega (
  id_intento INT PRIMARY KEY,
  id_usuario INT NOT NULL,
  id_cuestionario INT NOT NULL,
  num_correctas INT NOT NULL,
  CONSTRAINT fk_usuario FOREIGN KEY(id_usuario) REFERENCES USUARIOS(id_usuario),
  CONSTRAINT id_cuestionario FOREIGN KEY(id_cuestionario) REFERENCES CUESTIONARIOS(id_cuestionario)
);

-- add test data
INSERT INTO usuarios (nombre, apellido1, apellido2, email, password, rol)
  VALUES ('Raúl', 'Bulgariu', 'Suciu', 'raul@bulgariu.xyz', 'ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f', 'admin'),
  ('Jacinto', 'Sánchez', 'Villa', 'j.sanchezvilla@gmail.com', 'ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f', 'profesor'),
  ('David', 'Balaguer', 'Garcia', 'david@gmail.com', 'ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f', 'profesor'),
  ('Aaron', 'Martinez', '', 'aaron@martinez.xyz', 'ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f', 'estudiante');

INSERT INTO CUESTIONARIOS (id_usuario, titulo, descripcion)
  SELECT id_usuario, 'Examen SOM', 'Cuestionario con preguntas sobre SOM'
  FROM usuarios
  WHERE email = 'j.sanchezvilla@gmail.com';

INSERT INTO CUESTIONARIOS (id_usuario, titulo, descripcion)
  SELECT id_usuario, 'Examen OFI', 'Cuestionario con preguntas sobre OFI'
  FROM usuarios
  WHERE email = 'david@gmail.com';

INSERT INTO PREGUNTAS (id_cuestionario, enunciado)
  VALUES (1, 'Qué comando muestra los archivos del directorio actual?'),
  (1, 'Como podemos editar un archivo de texto?'),
  (2, 'Es GIMP un editor de texto?');

INSERT INTO RESPUESTAS (id_pregunta, respuesta, es_verdadera)
  VALUES (1, 'whoami', false),
  (1, 'ls', true),
  (1, 'chmod', false),
  (1, 'sudo', false),
  (2, 'nano', true),
  (2, 'cat', false),
  (2, 'vim', true),
  (2, 'less', false),
  (3, 'Verdadero', false),
  (3, 'Falso', true);

