-- ============================================================
-- ClaseOnline - Script de Base de Datos
-- Hector Vega Olivar - DAW 2025-2026
-- Codificacion: utf8mb4
-- ============================================================

SET CHARACTER SET utf8mb4;

CREATE DATABASE IF NOT EXISTS claseonline_db
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

USE claseonline_db;

-- ============================================================
-- Tabla: profesores
-- Un profesor puede impartir como maximo 1 curso (RF-9)
-- ============================================================
CREATE TABLE IF NOT EXISTS profesores (
  id         INT          NOT NULL AUTO_INCREMENT,
  nombre     VARCHAR(80)  NOT NULL,
  apellidos  VARCHAR(120) NOT NULL,
  email      VARCHAR(120) NOT NULL,
  bio        TEXT,
  created_at DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  UNIQUE KEY uq_prof_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- Tabla: cursos
-- RF-6 RF-7 RF-8: CRUD de cursos
-- RF-9: UNIQUE en profesor_id garantiza relacion 1:1
-- ============================================================
CREATE TABLE IF NOT EXISTS cursos (
  id             INT          NOT NULL AUTO_INCREMENT,
  nombre         VARCHAR(200) NOT NULL,
  descripcion    TEXT         NOT NULL,
  duracion_horas INT          NOT NULL DEFAULT 0,
  nivel          ENUM('Basico','Medio','Avanzado') NOT NULL DEFAULT 'Basico',
  estado         ENUM('borrador','publicado')      NOT NULL DEFAULT 'borrador',
  profesor_id    INT          DEFAULT NULL,
  created_at     DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  UNIQUE KEY uq_curso_profesor (profesor_id),
  CONSTRAINT fk_curso_profesor
    FOREIGN KEY (profesor_id)
    REFERENCES profesores (id)
    ON DELETE SET NULL
    ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- Tabla: inscripciones
-- RF-13: alumno se inscribe en un curso
-- RF-14: relacion alumno-curso con progreso
-- ============================================================
CREATE TABLE IF NOT EXISTS inscripciones (
  id                INT      NOT NULL AUTO_INCREMENT,
  alumno_id         INT      NOT NULL,
  curso_id          INT      NOT NULL,
  progreso          TINYINT  NOT NULL DEFAULT 0 COMMENT '0 a 100',
  fecha_inscripcion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  UNIQUE KEY uq_inscripcion (alumno_id, curso_id),
  CONSTRAINT fk_insc_alumno
    FOREIGN KEY (alumno_id) REFERENCES usuarios   (id) ON DELETE CASCADE,
  CONSTRAINT fk_insc_curso
    FOREIGN KEY (curso_id)  REFERENCES cursos     (id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================================
-- Profesores de ejemplo
-- ============================================================
INSERT INTO profesores (nombre, apellidos, email, bio) VALUES
  ('Carlos',  'Garcia Ruiz',    'cgarcia@claseonline.es',
   'Desarrollador Frontend Senior con 12 anos de experiencia en HTML, CSS y JavaScript.'),
  ('Ana',     'Martinez Lopez', 'amartinez@claseonline.es',
   'Data Scientist especializada en Python, Pandas y Machine Learning.'),
  ('Mario',   'Lopez Fernandez','mlopez@claseonline.es',
   'Disenador UX/UI con experiencia en startups y grandes empresas del sector tecnologico.'),
  ('Pedro',   'Sanchez Torres', 'psanchez@claseonline.es',
   'Arquitecto Cloud certificado AWS y Azure con 8 anos de experiencia.'),
  ('Laura',   'Romero Diaz',    'lromero@claseonline.es',
   'DBA especializada en MySQL, optimizacion de consultas y diseno de esquemas.');

-- ============================================================
-- Cursos de ejemplo (con nivel sin tilde para coherencia ENUM)
-- ============================================================
INSERT INTO cursos (nombre, descripcion, duracion_horas, nivel, estado, profesor_id) VALUES
  ('Desarrollo Web con HTML, CSS y JavaScript',
   'Aprende a construir sitios web modernos desde cero. Cubre HTML5, CSS3 con Flexbox y Grid, y JavaScript ES6+.',
   40, 'Basico', 'publicado', 1),

  ('Python para analisis de datos',
   'Domina las herramientas esenciales del analisis de datos: Pandas, NumPy, Matplotlib y Scikit-learn.',
   60, 'Medio', 'publicado', 2),

  ('Diseno UX/UI con Figma',
   'Aprende los fundamentos del diseno de interfaces: wireframing, prototipado y Design Systems con Figma.',
   35, 'Basico', 'publicado', 3),

  ('Cloud Computing con AWS',
   'Introduccion a la computacion en la nube con Amazon Web Services: EC2, S3, Lambda, RDS e IAM.',
   80, 'Avanzado', 'publicado', 4),

  ('Bases de datos con MySQL',
   'Fundamentos de bases de datos relacionales: modelado, SQL, normalizacion, triggers y stored procedures.',
   28, 'Medio', 'borrador', NULL),

  ('Desarrollo de apps con React Native',
   'Crea aplicaciones moviles multiplataforma con React Native: Components, Navigation y consumo de APIs.',
   55, 'Avanzado', 'borrador', NULL);

-- ============================================================
-- Inscripciones de ejemplo
-- CORRECCION DC: alumno_id NOT NULL (1 inscripcion = 1 alumno)
-- ============================================================
INSERT INTO inscripciones (alumno_id, curso_id, progreso) VALUES
  (2, 1, 65),   -- maria inscrita en Desarrollo Web, 65% progreso
  (2, 3, 30),   -- maria inscrita en Diseno UX/UI, 30% progreso
  (2, 2, 100),  -- maria completo Python
  (3, 1, 15),   -- juan en Desarrollo Web, 15% progreso
  (3, 4, 5);
