-- ============================================================
-- SCRIPT SQL — Hoja de Tiempo FEDEF
-- Equivalente a las migraciones de Laravel
-- Ejecutar en MySQL/MariaDB como usuario con privilegios
-- ============================================================

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

USE hoja_tiempo_fedef;

-- -------------------------------------------------------
-- Usuarios del sistema
-- -------------------------------------------------------
CREATE TABLE IF NOT EXISTS users (
    id            BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name          VARCHAR(255) NOT NULL,
    email         VARCHAR(255) NOT NULL UNIQUE,
    email_verified_at TIMESTAMP NULL,
    password      VARCHAR(255) NOT NULL,
    rol           ENUM('admin','supervisor','empleado') DEFAULT 'empleado',
    empleado_id   BIGINT UNSIGNED NULL,
    activo        TINYINT(1) DEFAULT 1,
    remember_token VARCHAR(100) NULL,
    created_at    TIMESTAMP NULL,
    updated_at    TIMESTAMP NULL
) ENGINE=InnoDB;

-- -------------------------------------------------------
-- Empleados
-- -------------------------------------------------------
CREATE TABLE IF NOT EXISTS empleados (
    id                  BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    nombre              VARCHAR(150) NOT NULL,
    cedula              VARCHAR(20)  NOT NULL UNIQUE,
    cargo               VARCHAR(100) NULL,
    salario             DECIMAL(12,2) DEFAULT 0,
    medicina_prepagada  DECIMAL(10,2) DEFAULT 0,
    alimentacion        DECIMAL(10,2) DEFAULT 0,
    zafiro              DECIMAL(10,2) DEFAULT 0,
    activo              TINYINT(1) DEFAULT 1,
    created_at          TIMESTAMP NULL,
    updated_at          TIMESTAMP NULL
) ENGINE=InnoDB;

ALTER TABLE users
    ADD CONSTRAINT fk_users_empleado
    FOREIGN KEY (empleado_id) REFERENCES empleados(id) ON DELETE SET NULL;

-- -------------------------------------------------------
-- Centros de costo
-- -------------------------------------------------------
CREATE TABLE IF NOT EXISTS centros_costo (
    id          BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    codigo      VARCHAR(20)  NOT NULL UNIQUE,
    nombre      VARCHAR(150) NOT NULL,
    area        VARCHAR(100) NULL,
    proceso     VARCHAR(100) NULL,
    descripcion TEXT NULL,
    es_exento   TINYINT(1) DEFAULT 0 COMMENT 'Vacaciones, Incapacidades, etc.',
    activo      TINYINT(1) DEFAULT 1,
    orden       INT DEFAULT 0,
    created_at  TIMESTAMP NULL,
    updated_at  TIMESTAMP NULL
) ENGINE=InnoDB;

-- -------------------------------------------------------
-- Períodos
-- -------------------------------------------------------
CREATE TABLE IF NOT EXISTS periodos (
    id           BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    mes          TINYINT UNSIGNED NOT NULL,
    anio         SMALLINT UNSIGNED NOT NULL,
    fecha_inicio DATE NOT NULL,
    fecha_fin    DATE NOT NULL,
    activo       TINYINT(1) DEFAULT 0,
    cerrado      TINYINT(1) DEFAULT 0,
    created_at   TIMESTAMP NULL,
    updated_at   TIMESTAMP NULL,
    UNIQUE KEY uk_periodo (mes, anio)
) ENGINE=InnoDB;

-- -------------------------------------------------------
-- Calendario
-- -------------------------------------------------------
CREATE TABLE IF NOT EXISTS calendario (
    id                   BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    fecha                DATE NOT NULL UNIQUE,
    dia_semana           TINYINT UNSIGNED NOT NULL COMMENT '0=Dom,1=Lun,...,6=Sab',
    es_festivo           TINYINT(1) DEFAULT 0,
    descripcion_festivo  VARCHAR(100) NULL,
    created_at           TIMESTAMP NULL,
    updated_at           TIMESTAMP NULL,
    INDEX idx_fecha (fecha)
) ENGINE=InnoDB;

-- -------------------------------------------------------
-- Hojas de tiempo
-- -------------------------------------------------------
CREATE TABLE IF NOT EXISTS hojas_tiempo (
    id           BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    empleado_id  BIGINT UNSIGNED NOT NULL,
    periodo_id   BIGINT UNSIGNED NOT NULL,
    estado       ENUM('borrador','enviado','aprobado') DEFAULT 'borrador',
    enviado_at   TIMESTAMP NULL,
    aprobado_at  TIMESTAMP NULL,
    aprobado_por BIGINT UNSIGNED NULL,
    created_at   TIMESTAMP NULL,
    updated_at   TIMESTAMP NULL,
    UNIQUE KEY uk_hoja (empleado_id, periodo_id),
    CONSTRAINT fk_hoja_empleado FOREIGN KEY (empleado_id) REFERENCES empleados(id) ON DELETE RESTRICT,
    CONSTRAINT fk_hoja_periodo  FOREIGN KEY (periodo_id)  REFERENCES periodos(id)  ON DELETE RESTRICT,
    CONSTRAINT fk_hoja_aprobado FOREIGN KEY (aprobado_por) REFERENCES users(id)    ON DELETE SET NULL
) ENGINE=InnoDB;

-- -------------------------------------------------------
-- Entradas de tiempo (horas por día y centro de costo)
-- -------------------------------------------------------
CREATE TABLE IF NOT EXISTS entradas_tiempo (
    id              BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    hoja_tiempo_id  BIGINT UNSIGNED NOT NULL,
    centro_costo_id BIGINT UNSIGNED NOT NULL,
    fecha           DATE NOT NULL,
    horas           DECIMAL(5,2) DEFAULT 0,
    created_at      TIMESTAMP NULL,
    updated_at      TIMESTAMP NULL,
    UNIQUE KEY uk_entrada (hoja_tiempo_id, centro_costo_id, fecha),
    CONSTRAINT fk_entrada_hoja   FOREIGN KEY (hoja_tiempo_id)  REFERENCES hojas_tiempo(id)  ON DELETE CASCADE,
    CONSTRAINT fk_entrada_cc     FOREIGN KEY (centro_costo_id) REFERENCES centros_costo(id) ON DELETE RESTRICT,
    INDEX idx_entrada_fecha (fecha)
) ENGINE=InnoDB;

-- -------------------------------------------------------
-- Comentarios por entrada
-- -------------------------------------------------------
CREATE TABLE IF NOT EXISTS comentarios_tiempo (
    id               BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    entrada_tiempo_id BIGINT UNSIGNED NOT NULL,
    comentario       TEXT NOT NULL,
    user_id          BIGINT UNSIGNED NOT NULL,
    created_at       TIMESTAMP NULL,
    updated_at       TIMESTAMP NULL,
    CONSTRAINT fk_coment_entrada FOREIGN KEY (entrada_tiempo_id) REFERENCES entradas_tiempo(id) ON DELETE CASCADE,
    CONSTRAINT fk_coment_user    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- ============================================================
-- DATOS INICIALES
-- ============================================================

-- Usuario administrador (contraseña: Fedef2024*)
INSERT INTO users (name, email, password, rol, activo, created_at, updated_at)
VALUES ('Administrador FEDEF', 'admin@fedef-co.com',
        '$2y$12$example_hash_replace_with_artisan_hash',
        'admin', 1, NOW(), NOW());

-- Empleados (datos reales del Excel - Hoja11)
INSERT INTO empleados (nombre, cedula, cargo, activo, created_at, updated_at) VALUES
('Carlos Parra',          '79618754',   'Gerente', 1, NOW(), NOW()),
('Catalina Sepulveda',    '52534905',   '',        1, NOW(), NOW()),
('Diego Ardila',          '1010245878', '',        1, NOW(), NOW()),
('Mónica Fernández',      '52282734',   '',        1, NOW(), NOW()),
('Daniela Prieto',        '1022439694', '',        1, NOW(), NOW()),
('Natalia Ortiz',         '1030670533', '',        1, NOW(), NOW()),
('Paola Ramirez',         '1031143276', '',        1, NOW(), NOW()),
('Laura Zambrano',        '1018475200', '',        1, NOW(), NOW()),
('Rocio Rojas',           '1069726522', '',        1, NOW(), NOW()),
('Wilder Gomez',          '1014193186', '',        1, NOW(), NOW()),
('Monica Garcia',         '1069733350', '',        1, NOW(), NOW()),
('Karen Bermudez',        '1015483732', '',        1, NOW(), NOW()),
('Lucy Anzola',           '1033800499', '',        1, NOW(), NOW()),
('Julian Rozo',           '1020836099', '',        1, NOW(), NOW()),
('Angie Cuervo',          '1000854198', '',        1, NOW(), NOW()),
('Cesar David Parra',     '1010217391', '',        1, NOW(), NOW()),
('Joan Sebastian Ramirez','1010040579', '',        1, NOW(), NOW()),
('Linda Isabel Pinto',    '52869807',   '',        1, NOW(), NOW()),
('Julio Alberto Cañas',   '1026287903', '',        1, NOW(), NOW()),
('Arley Basto Rivera',    '1120872020', '',        1, NOW(), NOW()),
('Luz Elena Gonzalez',    '21182199',   '',        1, NOW(), NOW());

-- Centros de costo (datos reales del Excel - Hoja25)
INSERT INTO centros_costo (codigo, nombre, area, es_exento, activo, orden, created_at, updated_at) VALUES
('ADM',     'Administración',                   'Gestión',    0, 1, 1,  NOW(), NOW()),
('MKT',     'Mercadeo estratégico',             'Gestión',    0, 1, 2,  NOW(), NOW()),
('GBP',     'Generación de buenas prácticas',   'Gestión',    0, 1, 3,  NOW(), NOW()),
('PROP',    'Propuestas',                        'Comercial',  0, 1, 4,  NOW(), NOW()),
('GCOM',    'Gestión Comercial',                'Comercial',  0, 1, 5,  NOW(), NOW()),
('GIT',     'Costo Gestión IT',                 'Tecnología', 0, 1, 6,  NOW(), NOW()),
('SSTA',    'Gestión SSTA',                     'SSTA',       0, 1, 7,  NOW(), NOW()),
('PGA',     'PGA',                              'SSTA',       0, 1, 8,  NOW(), NOW()),
('PGR',     'PGR',                              'SSTA',       0, 1, 9,  NOW(), NOW()),
('PGS',     'PGS',                              'SSTA',       0, 1, 10, NOW(), NOW()),
('PPB',     'Programa de promoción/bienestar',  'RRHH',       0, 1, 11, NOW(), NOW()),
('CSST',    'Capacitación SSTA',                'SSTA',       0, 1, 12, NOW(), NOW()),
('CTEC',    'Capacitación Técnica',             'RRHH',       0, 1, 13, NOW(), NOW()),
('RREC',    'Recursos (Humanos y físicos)',      'Gestión',    0, 1, 14, NOW(), NOW()),
('PCE',     'Proyectos cerrados',               'Proyectos',  0, 1, 15, NOW(), NOW()),
('PEJ',     'Proyectos en Ejecución',           'Proyectos',  0, 1, 16, NOW(), NOW()),
('GIN',     'Gestión Interna',                  'Gestión',    0, 1, 17, NOW(), NOW()),
-- Categorías exentas
('LIC_CAL', 'Licencias por calamidad',          'RRHH',       1, 1, 18, NOW(), NOW()),
('LIC_NR',  'Licencias NO remuneradas',         'RRHH',       1, 1, 19, NOW(), NOW()),
('INCAP',   'Incapacidades',                    'RRHH',       1, 1, 20, NOW(), NOW()),
('COMP',    'Compensatorios',                   'RRHH',       1, 1, 21, NOW(), NOW()),
('VAC',     'Vacaciones',                       'RRHH',       1, 1, 22, NOW(), NOW()),
('TM',      'Tiempos Muertos',                  'Operación',  1, 1, 23, NOW(), NOW());

-- ============================================================
-- NOTA: Para generar el hash correcto de la contraseña del admin,
-- después de instalar Laravel ejecutar:
--   php artisan tinker
--   >>> Hash::make('Fedef2024*')
-- Y actualizar el campo password del usuario admin con ese hash.
-- ============================================================
