<?php //Optimizaciones 25w12c
require_once("../functions.php");
$pag = basename($_SERVER['PHP_SELF']);
// No usamos comprobar_postget ya que ahora tenemos campos separados para grupo y empleado
gen_plantilla(true, $pag, false, false, '', false, false);

$entidad = filter_input(INPUT_POST, "entidad", FILTER_SANITIZE_SPECIAL_CHARS);
// Usar el campo correspondiente según la entidad seleccionada
if ($entidad === 'grupo') {
    $select = filter_input(INPUT_POST, "select_grupo", FILTER_SANITIZE_NUMBER_INT);
} else {
    $select = filter_input(INPUT_POST, "select_empleado", FILTER_SANITIZE_NUMBER_INT);
}
$f_ini = filter_input(INPUT_POST, "fecha-inicio", FILTER_SANITIZE_SPECIAL_CHARS);
$f_fin = filter_input(INPUT_POST, "fecha-fin", FILTER_SANITIZE_SPECIAL_CHARS);
$tipo_dia = filter_input(INPUT_POST, "tipo_dia", FILTER_SANITIZE_NUMBER_INT); //Agregado beta 24w37d

// Validar que se haya seleccionado entidad y valor
if (empty($entidad) || empty($select) || empty($f_ini) || empty($f_fin)) {
    header("Location: " . SITIO_CARPETA . "/views/forms/festivo?tipo=error&mensaje=Faltan campos obligatorios");
    exit;
}

/*******************************************************************************
 *                                 [Consulta]                                  *
 *******************************************************************************/

//AQUI HABRÍA QUE COMPROBAR SI EXISTEN INCIDENCIAS Y PONERLAS COMO CORREGIDAS DE ESTE EMPLEADO
if (SISTEMA_INCIDENCIAS) {
    //Agregado beta 24w37d
    //Crear incidencias resueltas según la entidad
    $consulta = 'SELECT t.id AS id_empleado, t.nombre AS nombre_empleado
            FROM empleados AS t ';
    $consulta .= match ($entidad) {
        "grupo" => 'INNER JOIN grupos AS g ON t.id_grupo=g.id
                WHERE g.id=?',
        "empleado" => 'WHERE t.id=?'
    };
    $consulta .= ' ORDER BY t.id;';

    $empleados = consulta($consulta, [$select], true);

    $fecha_inicio = new DateTime($f_ini);
    $fecha_fin = new DateTime($f_fin);

    $consulta1 = 'SELECT id FROM incidencias WHERE fecha BETWEEN ? AND ? AND estado=0 AND (';
    $array = [$f_ini, $f_fin];
    for ($i = 0; $i < count($empleados); $i++) {
        $consulta1 .= 'id_empleado = ? ';
        $array[] = $empleados[$i]['id_empleado'];
        if ($i < count($empleados) - 1) {
            $consulta1 .= ' OR ';
        }
    }
    $consulta1 .= ');';
    $incidencias_existentes = consulta(
        $consulta1,
        $array,
        true
    );

    if (!empty($incidencias_existentes)) {
        for ($i = 0; $i < count($incidencias_existentes); $i++) {
            consulta(
                'UPDATE incidencias SET estado=1, id_motivo=9 WHERE id=?',
                [$incidencias_existentes[$i]['id']],
                false
            );
            crear_log(
                'info',
                'Incidencia resuelta',
                $pag,
                'Se ha resuelto automáticamente la incidencia con id [' . $incidencias_existentes[$i]['id'] . '].'
            );
        }
    }

    //Bucle de crear incidencias de cada empleado afectado
    if ($fecha_fin >= $fecha_inicio && !empty($empleados)) {
        for ($fecha = $fecha_inicio; $fecha <= $fecha_fin; $fecha->modify('+1 day')) {
            for ($i = 0; $i < count($empleados); $i++) {
                consulta(
                    'INSERT INTO `incidencias`(`id_empleado`,`id_registro`, `nombre_empleado`, `rh1`, `rh2`, `rh3`, `rh4`,
                `rh5`, `rh6`, `fecha`, `diferencia_horas`, `id_motivo`, `estado`, `descripcion`)
                VALUES (?,0,?,0,NULL,NULL,NULL,NULL,NULL,?,0,?,0,?)',
                    [
                        $empleados[$i]['id_empleado'],
                        $empleados[$i]['nombre_empleado'],
                        $fecha->format('Y-m-d'),
                        $tipo_dia,
                        "<span class='men-incidencia incidencia-no-trabajo' title='Festivo/vacaciones'>Festivo/vacaciones</span>"
                    ],
                    false
                );
                crear_log(
                    'info',
                    'Creada incidencia resuelta',
                    $pag,
                    'Se ha creado una incidencia resuelta con estos datos [' . $empleados[$i]['id_empleado'] . ', ' .
                        $empleados[$i]['nombre_empleado'] . ', ' .
                        $fecha->format('Y-m-d') . ', ' .
                        $tipo_dia . ", 
                <span class='men-incidencia incidencia-no-trabajo' title='Festivo/vacaciones'>Festivo/vacaciones</span>" . '].'
                );
            }
        }
    } else {
        crear_log(
            'error',
            'Fecha fin superior a fecha de inicio o no hay empleados',
            $pag,
            'Error al crear la incidencia resuelta porque la fecha fin es superior a fecha de inicio o no hay empleados.'
        );
    }
}

//Agregar día inhábil

$consulta = "INSERT INTO `dias_inhabiles`(`id_grupo`, `id_empleado`,`id_motivo`,
`fecha_entrada`, `fecha_termina`) VALUES (";

$consulta .= match ($entidad) {
    "grupo" => "?,NULL,",
    "empleado" => "NULL,?,"
};
$consulta .= "?,?,?);";

if (!consulta($consulta, [$select, $tipo_dia, $f_ini, $f_fin], false)) {
    crear_log(
        "error",
        "Error en la consulta",
        $pag,
        "No se ha podido crear los días inhábiles, porque ha ocurrido un error en la consulta."
    );
    header("Location: " . SITIO_CARPETA . "/views/forms/festivo?tipo=error&mensaje=No se ha podido añadir, ha ocurrido un error");
} else {
    crear_log(
        "info",
        "Días inhábiles creado",
        $pag,
        "Se han creado los días inhábiles de <b class='rojo'>[$entidad]</b> los días <b class='rojo'>[$f_ini - $f_fin]</b>."
    );
    header("Location: " . SITIO_CARPETA . "/views/tables/festivos?tipo=correcto&mensaje=Se ha creado correctamente");
}
