-- Actualización de base de datos v3
-- Agregar nuevas tablas y campos

USE sistema_convocatorias;

-- Tabla de áreas/categorías
CREATE TABLE IF NOT EXISTS areas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL UNIQUE,
    descripcion TEXT,
    activo TINYINT(1) DEFAULT 1,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_activo (activo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Insertar áreas por defecto
INSERT INTO areas (nombre, descripcion) VALUES
('Música', 'Proyectos relacionados con música'),
('Artes Visuales', 'Pintura, escultura, fotografía'),
('Cine y Audiovisual', 'Producción cinematográfica y audiovisual'),
('Teatro', 'Artes escénicas y teatro'),
('Danza', 'Danza y coreografía'),
('Literatura', 'Escritura y literatura'),
('Artes Digitales', 'Arte digital y nuevos medios');

-- Agregar campos a usuarios para persona jurídica y área
ALTER TABLE usuarios 
ADD COLUMN IF NOT EXISTS tipo_persona ENUM('natural', 'juridica') DEFAULT 'natural' AFTER rol,
ADD COLUMN IF NOT EXISTS razon_social VARCHAR(255) NULL AFTER tipo_persona,
ADD COLUMN IF NOT EXISTS nit VARCHAR(50) NULL AFTER razon_social,
ADD COLUMN IF NOT EXISTS representante_legal VARCHAR(200) NULL AFTER nit,
ADD COLUMN IF NOT EXISTS telefono VARCHAR(20) NULL AFTER email,
ADD COLUMN IF NOT EXISTS area_id INT NULL AFTER telefono,
ADD FOREIGN KEY (area_id) REFERENCES areas(id) ON DELETE SET NULL;

-- Agregar campos a convocatorias
ALTER TABLE convocatorias
ADD COLUMN IF NOT EXISTS habeas_data TEXT NULL AFTER documentos_requeridos,
ADD COLUMN IF NOT EXISTS requisitos JSON NULL AFTER habeas_data,
ADD COLUMN IF NOT EXISTS banner VARCHAR(500) NULL AFTER requisitos,
ADD COLUMN IF NOT EXISTS numero_finalistas INT DEFAULT 10 AFTER banner;

-- Agregar campos a postulaciones para estados y fases
ALTER TABLE postulaciones
MODIFY COLUMN estado ENUM('postulado', 'finalista', 'seleccionado', 'rechazado') DEFAULT 'postulado',
ADD COLUMN IF NOT EXISTS fase ENUM('inicial', 'finalistas') DEFAULT 'inicial' AFTER estado,
ADD COLUMN IF NOT EXISTS puede_editar TINYINT(1) DEFAULT 0 AFTER fase,
ADD COLUMN IF NOT EXISTS campos_editables JSON NULL AFTER puede_editar;

-- Tabla de rectificaciones
CREATE TABLE IF NOT EXISTS rectificaciones (
    id INT AUTO_INCREMENT PRIMARY KEY,
    postulacion_id INT NOT NULL,
    solicitante_id INT NOT NULL,
    tipo_solicitante ENUM('root', 'juez') NOT NULL,
    campos_habilitados JSON NULL,
    documentos_habilitados JSON NULL,
    nota TEXT NOT NULL,
    estado ENUM('pendiente', 'completada', 'cancelada') DEFAULT 'pendiente',
    token VARCHAR(64) UNIQUE NOT NULL,
    fecha_solicitud TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_completada TIMESTAMP NULL,
    FOREIGN KEY (postulacion_id) REFERENCES postulaciones(id) ON DELETE CASCADE,
    FOREIGN KEY (solicitante_id) REFERENCES usuarios(id) ON DELETE CASCADE,
    INDEX idx_postulacion (postulacion_id),
    INDEX idx_token (token),
    INDEX idx_estado (estado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Tabla de cronograma
CREATE TABLE IF NOT EXISTS cronograma (
    id INT AUTO_INCREMENT PRIMARY KEY,
    convocatoria_id INT NOT NULL,
    fase VARCHAR(100) NOT NULL,
    descripcion TEXT,
    fecha_inicio DATE NOT NULL,
    fecha_fin DATE NOT NULL,
    orden INT DEFAULT 0,
    FOREIGN KEY (convocatoria_id) REFERENCES convocatorias(id) ON DELETE CASCADE,
    INDEX idx_convocatoria (convocatoria_id),
    INDEX idx_orden (orden)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
