CREATE DATABASE IF NOT EXISTS USERS_ALMA;
CREATE DATABASE IF NOT EXISTS vanity_hr;
CREATE DATABASE IF NOT EXISTS vanity_attendance;

USE USERS_ALMA;

CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE,
    role ENUM('admin', 'manager', 'user'),
    first_name VARCHAR(100),
    last_name VARCHAR(100),
    email VARCHAR(100) UNIQUE,
    cell_phone VARCHAR(20),
    telegram_id VARCHAR(50) UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS request_logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    telegram_id VARCHAR(50),
    username VARCHAR(100),
    command VARCHAR(100),
    message VARCHAR(500),
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

USE vanity_hr;

CREATE TABLE IF NOT EXISTS data_empleadas (
    numero_empleado VARCHAR(15) PRIMARY KEY,
    puesto VARCHAR(50),
    sucursal VARCHAR(50),
    fecha_ingreso DATE,
    estatus VARCHAR(15),
    nombre_completo VARCHAR(150),
    nombre VARCHAR(50),
    nombre_preferido VARCHAR(50),
    apellido_paterno VARCHAR(50),
    apellido_materno VARCHAR(50),
    fecha_nacimiento DATE,
    lugar_nacimiento VARCHAR(50),
    rfc VARCHAR(13) UNIQUE,
    curp VARCHAR(18) UNIQUE,
    email VARCHAR(100),
    telefono_celular VARCHAR(15),
    domicilio_calle VARCHAR(255),
    domicilio_numero_exterior VARCHAR(10),
    domicilio_numero_interior VARCHAR(10),
    domicilio_numero_texto VARCHAR(50),
    domicilio_colonia VARCHAR(255),
    domicilio_codigo_postal VARCHAR(10),
    domicilio_ciudad VARCHAR(100),
    domicilio_estado VARCHAR(50),
    domicilio_completo VARCHAR(255),
    emergencia_nombre VARCHAR(100),
    emergencia_telefono VARCHAR(15),
    emergencia_parentesco VARCHAR(50),
    referencia_1_nombre VARCHAR(100),
    referencia_1_telefono VARCHAR(15),
    referencia_1_tipo VARCHAR(20),
    referencia_2_nombre VARCHAR(100),
    referencia_2_telefono VARCHAR(15),
    referencia_2_tipo VARCHAR(20),
    referencia_3_nombre VARCHAR(100),
    referencia_3_telefono VARCHAR(15),
    referencia_3_tipo VARCHAR(20),
    origen_registro VARCHAR(50),
    telegram_usuario VARCHAR(50),
    telegram_chat_id BIGINT,
    bot_version VARCHAR(20),
    fecha_registro DATETIME,
    tiempo_registro_minutos INT,
    fecha_procesamiento DATETIME(3)
);

CREATE TABLE IF NOT EXISTS vacaciones (
    vacaciones_id VARCHAR(50) PRIMARY KEY,
    numero_empleado VARCHAR(15),
    tipo_solicitud VARCHAR(20),
    estatus ENUM('pendiente', 'aprobado', 'rechazado', 'cancelado'),
    fecha_inicio DATE,
    fecha_fin DATE,
    dias_solicitados INT,
    dias_habiles INT,
    motivo TEXT,
    con_goce_sueldo TINYINT(1),
    fecha_solicitud DATETIME,
    fecha_procesamiento DATETIME(3),
    origen VARCHAR(20),
    afecta_nomina TINYINT(1),
    FOREIGN KEY (numero_empleado) REFERENCES data_empleadas(numero_empleado)
);

CREATE TABLE IF NOT EXISTS permisos (
    permiso_id VARCHAR(50) PRIMARY KEY,
    numero_empleado VARCHAR(15),
    categoria ENUM('PERSONAL', 'MEDICO', 'OFICIAL', 'OTRO'),
    estatus ENUM('pendiente', 'aprobado', 'rechazado', 'cancelado'),
    fecha_inicio DATE,
    horario_especifico VARCHAR(50),
    motivo TEXT,
    con_goce_sueldo TINYINT(1),
    afecta_nomina TINYINT(1),
    FOREIGN KEY (numero_empleado) REFERENCES data_empleadas(numero_empleado)
);

USE vanity_attendance;

CREATE TABLE IF NOT EXISTS asistencia_registros (
    id_asistencia INT AUTO_INCREMENT PRIMARY KEY,
    numero_empleado VARCHAR(15),
    fecha DATE,
    hora_entrada_real TIME,
    hora_salida_real TIME,
    minutos_retraso INT,
    minutos_extra INT,
    sucursal_registro VARCHAR(50),
    telegram_id_usado BIGINT,
    FOREIGN KEY (numero_empleado) REFERENCES vanity_hr.data_empleadas(numero_empleado)
);

CREATE TABLE IF NOT EXISTS horario_empleadas (
    id_horario INT AUTO_INCREMENT PRIMARY KEY,
    numero_empleado VARCHAR(15),
    telegram_id BIGINT,
    dia_semana VARCHAR(20),
    hora_entrada_teorica TIME,
    hora_salida_teorica TIME,
    FOREIGN KEY (numero_empleado) REFERENCES vanity_hr.data_empleadas(numero_empleado)
);

CREATE TABLE IF NOT EXISTS horarios_configurados (
    id INT AUTO_INCREMENT PRIMARY KEY,
    telegram_id BIGINT NOT NULL,
    timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
    short_name VARCHAR(100),
    monday_in TIME,
    monday_out TIME,
    tuesday_in TIME,
    tuesday_out TIME,
    wednesday_in TIME,
    wednesday_out TIME,
    thursday_in TIME,
    thursday_out TIME,
    friday_in TIME,
    friday_out TIME,
    saturday_in TIME,
    saturday_out TIME
);
