CREATE TABLE perfiles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL,
    permisos JSON COMMENT 'Aquí podemos guardar un JSON con los accesos específicos a módulos'
);

-- Inserción del perfil por defecto
INSERT INTO perfiles (nombre, permisos) VALUES ('Administrador', '{"all": true}');

-- Tabla principal de Usuarios (Trabajadores)
CREATE TABLE usuarios (
    rut VARCHAR(12) PRIMARY KEY COMMENT 'Formato con guión, ej: 12345678-9',
    password_hash VARCHAR(255) NOT NULL,
    perfil_id INT NOT NULL,
    nombre_completo VARCHAR(150) NOT NULL,
    direccion_personal VARCHAR(200),
    correo_personal VARCHAR(100) UNIQUE,
    telefono_personal VARCHAR(20),
    fecha_nacimiento DATE NOT NULL,
    edad_al_crearse INT NOT NULL COMMENT 'Edad calculada por PHP al momento del INSERT',
    fecha_creacion DATETIME DEFAULT CURRENT_TIMESTAMP,
    estado BOOLEAN DEFAULT TRUE COMMENT 'True=Activo, False=Inactivo',
    FOREIGN KEY (perfil_id) REFERENCES perfiles(id)
);

-- Tabla de Habilidades (Catálogo dinámico)
CREATE TABLE habilidades (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL UNIQUE
);

-- Tabla Intermedia: Usuarios - Habilidades (Relación muchos a muchos)
CREATE TABLE usuario_habilidades (
    rut_usuario VARCHAR(12),
    habilidad_id INT,
    nivel INT DEFAULT 1 COMMENT 'Opcional: Nivel de dominio del 1 al 5',
    PRIMARY KEY (rut_usuario, habilidad_id),
    FOREIGN KEY (rut_usuario) REFERENCES usuarios(rut) ON DELETE CASCADE,
    FOREIGN KEY (habilidad_id) REFERENCES habilidades(id) ON DELETE CASCADE
);

-- Tabla para la Hoja de Vida (Casos, situaciones, eventos)
CREATE TABLE hoja_vida_usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    rut_usuario VARCHAR(12) NOT NULL,
    fecha_evento DATETIME DEFAULT CURRENT_TIMESTAMP,
    tipo_anotacion ENUM('Positiva', 'Negativa', 'Neutral') DEFAULT 'Neutral',
    descripcion TEXT NOT NULL,
    registrado_por VARCHAR(12) NOT NULL COMMENT 'RUT del administrador que hizo la anotación',
    FOREIGN KEY (rut_usuario) REFERENCES usuarios(rut),
    FOREIGN KEY (registrado_por) REFERENCES usuarios(rut)
);

CREATE TABLE recuperacion_password (
    id INT AUTO_INCREMENT PRIMARY KEY,
    rut_usuario VARCHAR(12) NOT NULL,
    token_hash VARCHAR(128) NOT NULL COMMENT 'Guardamos el token encriptado por seguridad',
    fecha_expiracion DATETIME NOT NULL,
    usado BOOLEAN DEFAULT FALSE,
    fecha_creacion DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (rut_usuario) REFERENCES usuarios(rut) ON DELETE CASCADE
);