-- ============================================================
-- SIGDA - RRHH / PLANILLAS Y LIQUIDACIONES
-- ============================================================
-- Ejecutar una sola vez después de haber creado:
-- trabajadores, adelantos_trabajador, descuentos_trabajador,
-- asistencias y vacaciones_trabajador.
--
-- Las tablas se crean con IF NOT EXISTS para evitar duplicados.
-- ============================================================

CREATE TABLE IF NOT EXISTS planillas (
    id_planilla BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    periodo_inicio DATE NOT NULL,
    periodo_fin DATE NOT NULL,
    fecha_generacion DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    estado ENUM('BORRADOR','GENERADA','CERRADA') NOT NULL DEFAULT 'BORRADOR',
    total_bruto DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    total_deducciones DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    total_neto DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    observaciones VARCHAR(500) NULL,
    created_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uq_planilla_periodo (periodo_inicio, periodo_fin),
    CONSTRAINT chk_planilla_periodo
        CHECK (periodo_fin >= periodo_inicio)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS planillas_detalle (
    id_detalle BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    id_planilla BIGINT UNSIGNED NOT NULL,
    id_trabajador BIGINT UNSIGNED NOT NULL,
    sueldo_base DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    dias_periodo INT NOT NULL DEFAULT 0,
    dias_asistidos INT NOT NULL DEFAULT 0,
    dias_falta INT NOT NULL DEFAULT 0,
    dias_permiso INT NOT NULL DEFAULT 0,
    dias_vacaciones INT NOT NULL DEFAULT 0,
    horas_extra DECIMAL(10,2) NOT NULL DEFAULT 0.00,
    monto_horas_extra DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    bonificaciones DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    descuentos_asistencia DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    adelantos DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    descuentos DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    total_bruto DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    total_deducciones DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    neto_pagar DECIMAL(12,2) NOT NULL DEFAULT 0.00,
    estado_pago ENUM('PENDIENTE','PAGADO','ANULADO') NOT NULL DEFAULT 'PENDIENTE',
    fecha_pago DATETIME NULL,
    medio_pago VARCHAR(30) NULL,
    referencia_pago VARCHAR(150) NULL,
    observaciones VARCHAR(500) NULL,
    created_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    UNIQUE KEY uq_planilla_trabajador (id_planilla, id_trabajador),
    KEY idx_planilla_detalle_trabajador (id_trabajador),

    CONSTRAINT fk_planilla_detalle_planilla
        FOREIGN KEY (id_planilla)
        REFERENCES planillas(id_planilla)
        ON UPDATE CASCADE
        ON DELETE CASCADE,

    CONSTRAINT fk_planilla_detalle_trabajador
        FOREIGN KEY (id_trabajador)
        REFERENCES trabajadores(id_trabajador)
        ON UPDATE CASCADE
        ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
