<?php
require_once("../../functions.php");
$pag = basename($_SERVER['PHP_SELF']);
gen_plantilla(true, $pag, false, false, '', false, false);

// Solo admin puede aplicar masivo
if ($_SESSION['tipo_usuario'] !== 'admin') {
    crear_notificacion('error', 'No tienes permisos para esta acción');
    exit;
}

$ids_json = filter_input(INPUT_POST, "ids", FILTER_UNSAFE_RAW);
$horas = filter_input(INPUT_POST, "horas", FILTER_SANITIZE_SPECIAL_CHARS);
$nota = filter_input(INPUT_POST, "nota", FILTER_SANITIZE_SPECIAL_CHARS);

if (empty($ids_json) || empty($horas)) {
    crear_notificacion('error', 'Faltan datos para la aplicación masiva');
    exit;
}

$ids = json_decode($ids_json, true);
if (!is_array($ids) || empty($ids)) {
    crear_notificacion('error', 'No se han recibido empleados');
    exit;
}

$horas = str_replace(',', '.', $horas);
$horas_valor = (float) $horas;

if ($horas_valor == 0) {
    crear_notificacion('error', 'La cantidad de horas debe ser distinta de 0');
    exit;
}

$nota_completa = "Aplicación masiva: " . ($horas_valor > 0 ? '+' : '') . $horas_valor . "h" . (!empty($nota) ? " - " . $nota : "");
$errores = 0;
$aciertos = 0;

foreach ($ids as $id_empleado) {
    $id_empleado = (int) $id_empleado;
    if ($id_empleado <= 0) continue;

    // Determinar fechas
    if (SISTEMA_INCIDENCIAS) {
        $fechas = get_ult_fecha_cierre();
        $fechainicio = !empty($fechas) ? $fechas[0]['fecha_inicio'] : date('Y-m-d');
        $fechafin = !empty($fechas) ? $fechas[0]['fecha_fin'] : date('Y-m-d');
    } else {
        //Saber ultimo registro de historial de horas acumuladas y será fecha inicio y fecha fin hoy
        $ultimo_hist_acu = consulta('SELECT * FROM `historial_horas_acumuladas` WHERE id_empleado=? ORDER BY id DESC LIMIT 1;', [$id_empleado], true);
        $fechainicio = !empty($ultimo_hist_acu) ? $ultimo_hist_acu[0]['fecha_inicio'] : date('Y-m-d');
        $fechafin = date('Y-m-d');
    }

    // Obtener horas actuales
    $emp = consulta("SELECT horas_acu FROM empleados WHERE id=?;", [$id_empleado], true);
    if (empty($emp)) continue;

    $horas_actuales = (float) $emp[0]['horas_acu'];
    $nuevo_total = $horas_actuales + $horas_valor;

    // Guardar registro en historial
    consulta(
        "INSERT INTO `historial_horas_acumuladas`(`id_empleado`, `fecha_inicio`, `fecha_fin`, `horas_disponibles`,
            `horas_pagadas`, `horas_acumuladas`, `nota`) VALUES (?,?,?,?,?,?,?);",
        [$id_empleado, $fechainicio, $fechafin, $horas_actuales, 0, $nuevo_total, $nota_completa],
        false
    );

    // Actualizar empleado
    if (!consulta("UPDATE `empleados` SET `horas_acu`=? WHERE id=?;", [$nuevo_total, $id_empleado], false)) {
        $errores++;
    } else {
        $aciertos++;
    }
}

$signo = $horas_valor > 0 ? '+' : '';
if ($errores > 0) {
    crear_log("error", "Aplicación masiva de horas con errores", $pag,
        "Se aplicaron {$signo}{$horas_valor}h a {$aciertos} empleados con {$errores} errores. Nota: {$nota_completa}");
    crear_notificacion('error', "Se aplicaron las horas a {$aciertos} empleados, pero hubo {$errores} errores");
} else {
    crear_log("info", "Aplicación masiva de horas", $pag,
        "Se aplicaron {$signo}{$horas_valor}h a {$aciertos} empleados. Nota: {$nota_completa}");
    crear_notificacion('correcto', "Se aplicaron {$signo}{$horas_valor}h a {$aciertos} empleados correctamente");
}
