const Sequelize = require('sequelize');
var db = require("../database/db.js");

/**
 * VACACIONES_SALDO
 * Guarda el balance de vacaciones calculado por empleado y año de servicio.
 *
 * La Matriz de Vacaciones calcula para cada empleado:
 *   - Días causados según años de antigüedad (escala legal Ecuador)
 *   - Días tomados (sumados desde PERMISO donde CARGO_VACACIONES = true)
 *   - Días pendientes = causados - tomados
 *   - Valor económico = (salario diario) * días pendientes
 *
 * ANIO_SERVICIO: año calendario laboral del empleado (1, 2, 3...).
 * FECHA_CORTE:   fecha exacta en que se calculó el período (aniversario laboral).
 *
 * Esta tabla funciona como snapshot de cierre; el cálculo en tiempo real
 * puede derivarse desde HISTORIAL_EMPRESA + PERMISO.
 */
const VacacionesSaldo = db.sequelize.define('VACACIONES_SALDO', {

    ID_SALDO: {
        primaryKey: true,
        type: Sequelize.BIGINT,
        allowNull: false,
        autoIncrement: true
    },

    ID_USUARIO: {
        type: Sequelize.INTEGER,
        allowNull: false,
    },

    // Año de servicio (período laboral 1, 2, 3...) no año calendario
    ANIO_SERVICIO: {
        type: Sequelize.INTEGER,
        allowNull: false,
        comment: 'Número de año de servicio del empleado. Ej: 1 = primer año, 2 = segundo año'
    },

    // Fecha de corte del período vacacional (aniversario de ingreso)
    FECHA_CORTE: {
        type: Sequelize.DATEONLY,
        allowNull: false,
        comment: 'Fecha de corte del período: generalmente el aniversario de ingreso'
    },

    // --- Balance de días ---
    DIAS_CAUSADOS: {
        type: Sequelize.DECIMAL(6, 2),
        allowNull: true,
        defaultValue: 0,
        comment: 'Días de vacaciones generados según la ley y años de servicio'
    },

    DIAS_TOMADOS: {
        type: Sequelize.DECIMAL(6, 2),
        allowNull: true,
        defaultValue: 0,
        comment: 'Días de vacaciones ya usados (suma de PERMISO.DIAS_CARGO_VACACIONES)'
    },

    DIAS_PENDIENTES: {
        type: Sequelize.DECIMAL(6, 2),
        allowNull: true,
        defaultValue: 0,
        comment: 'Días pendientes de tomar: DIAS_CAUSADOS - DIAS_TOMADOS'
    },

    // --- Valoración económica ---
    TOTAL_INGRESOS: {
        type: Sequelize.DECIMAL(10, 2),
        allowNull: true,
        comment: 'Total de ingresos del empleado en el período (base para cálculo)'
    },

    VALOR_DIA: {
        type: Sequelize.DECIMAL(10, 4),
        allowNull: true,
        comment: 'Valor económico de un día de vacaciones: TOTAL_INGRESOS / 360'
    },

    VALOR_ECONOMICO: {
        type: Sequelize.DECIMAL(10, 2),
        allowNull: true,
        defaultValue: 0,
        comment: 'Valor en USD de los días pendientes: VALOR_DIA * DIAS_PENDIENTES'
    },

    OBSERVACION: {
        type: Sequelize.STRING(500),
        allowNull: true,
    },

    // Fecha en que se ejecutó el cálculo
    FECHA_CALCULO: {
        type: Sequelize.DATE,
        allowNull: false,
        defaultValue: Sequelize.NOW,
        comment: 'Timestamp en que se generó o actualizó este saldo'
    },

},
    {
        timestamps: false,
        id: false
    });

module.exports = VacacionesSaldo;
