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

//Comprobar is está sistema de incidencias activo
if(!SISTEMA_INCIDENCIAS){
    crear_notificacion("error", "No tienes acceso a esta página");
    exit;
}

/*******************************************************************************
 *                                [Parámetros]                                 *
 *******************************************************************************/
if (
    !isset($_POST['fecha_inicio']) || !isset($_POST['fecha_fin'])
    || !isset($_POST['id_grupo']) || !isset($_POST['id_motivo'])
) {
    crear_log(
        'error',
        'Error al aplicar incidencia por grupo',
        $pag,
        'No se ha podido aplicar la incidencia, porque no hay parámetros.'
    );
    crear_notificacion('error', 'No se ha podido arreglar las incidencias, recargando datos');
    exit;
}

$fecha_inicio = filter_input(INPUT_POST, 'fecha_inicio', FILTER_SANITIZE_SPECIAL_CHARS);
$fecha_fin = filter_input(INPUT_POST, 'fecha_fin', FILTER_SANITIZE_SPECIAL_CHARS);
$id_grupo = filter_input(INPUT_POST, 'id_grupo', FILTER_SANITIZE_NUMBER_INT);
$id_motivo = filter_input(INPUT_POST, 'id_motivo', FILTER_SANITIZE_NUMBER_INT);
/*******************************************************************************
 *                                 [Consulta]                                  *
 *******************************************************************************/
//Consulta incidencias afectadas
$incidencias_afectadas = consulta(
    'SELECT i.id,i.id_empleado, i.nombre_empleado, i.rh1, i.rh2, i.rh3, i.rh4, i.rh5, i.rh6,
    i.fecha, i.descripcion
    FROM incidencias AS i
    LEFT JOIN empleados AS t ON i.id_empleado=t.id
    WHERE i.estado=1 AND t.id_grupo = ? AND i.fecha BETWEEN ? AND ?;',
    [$id_grupo, $fecha_inicio, $fecha_fin],
    true
);

//Por modificar todo

//comprobar si el motivo hay que modificar horario
$motivos = consulta("SELECT resolucion, modificar_horario FROM motivos WHERE id=?;", [$id_motivo], true);
if (!empty($motivos)) {
    for ($ii = 0; $ii < count($incidencias_afectadas); $ii++) {

        $idincidencia = $incidencias_afectadas[$ii]['id'];
        $id_empleado = $incidencias_afectadas[$ii]['id_empleado'];
        $nombre_empleado = $incidencias_afectadas[$ii]['nombre_empleado'];
        $fecha = $incidencias_afectadas[$ii]['fecha'];
        $resolucion = $motivos[0]["resolucion"];

        if ($motivos[0]["modificar_horario"] == 1) {
            //  si hay que cambiar coger hora teórica
            //      eliminar registros de esa fecha de ese empelado
            //      y insertar hora teórica
            $fechaObjeto = new DateTime($fecha);
            $dianum = $fechaObjeto->format('N');

            //Obtener horario teórico
            $dias = [1=>'lun',2=>'mar',3=>'mie',4=>'jue',5=>'vie',6=>'sab',7=>'dom'];
            $dia = $dias[(int)$dianum];
            $total_teorico = get_horas_hace_empleado($id_empleado, $dia);

            $trab = consulta("SELECT * FROM empleados WHERE id=?;", [$id_empleado], true);
            $id_grupo_emp = !empty($trab) ? $trab[0]['id_grupo'] : null;
            $grup = !empty($id_grupo_emp) ? consulta("SELECT * FROM grupos WHERE id=?;", [$id_grupo_emp], true) : [];

            $norm = function($v){ return ($v === '00:00' || $v === '00:00:00' || $v === '' || $v === null) ? null : $v; };

            $h1 = $norm($trab[0][$dia.'h1'] ?? null); $h2 = $norm($trab[0][$dia.'h2'] ?? null); $h3 = $norm($trab[0][$dia.'h3'] ?? null);
            $h4 = $norm($trab[0][$dia.'h4'] ?? null); $h5 = $norm($trab[0][$dia.'h5'] ?? null); $h6 = $norm($trab[0][$dia.'h6'] ?? null);

            if (empty($h1) && empty($h2) && empty($h3) && empty($h4) && empty($h5) && empty($h6) && !empty($grup)) {
                $h1 = $norm($grup[0][$dia.'h1'] ?? null); $h2 = $norm($grup[0][$dia.'h2'] ?? null); $h3 = $norm($grup[0][$dia.'h3'] ?? null);
                $h4 = $norm($grup[0][$dia.'h4'] ?? null); $h5 = $norm($grup[0][$dia.'h5'] ?? null); $h6 = $norm($grup[0][$dia.'h6'] ?? null);
            }

            //eliminar horario del usuario con esa fecha

            if (!consulta("DELETE FROM `registros` WHERE id_empleado=? AND fecha=?;", [$id_empleado, $fecha], false)) {
                crear_log(
                    "error",
                    "Error al eliminar registros",
                    $pag,
                    "Ha ocurrido un error al aplicar la incidencia, no se ha podido eliminar los registros con estos parámetros [$id_empleado, $fecha]"
                );
                crear_notificacion('error', 'No se ha podido actualizar la incidencia con id [' . $idincidencia . ']
                , ha ocurrido un error interno, recargando datos');
                exit;
            }
            crear_log(
                "info",
                "Registros eliminados",
                $pag,
                "Se han eliminado correctamente los registros del usuario
        <span class='rojo'><b>[$id_empleado]</b></span> y fecha <span class='rojo'><b>$fecha</b></span>"
            );

            //insertar horario teórico como horario de validación

            $insertadas = 0;
            if (!empty($h1)) {
                if (!consulta(
                    "INSERT INTO `registros`(`nombre`,`id_empleado`,`hora1`,`hora2`,`hora3`,`hora4`,`hora5`,`hora6`,`fecha`,`activo`)
                     VALUES (?,?,?,?,?,?,?,?,?,1)",
                    [$nombre_empleado, $id_empleado, $h1, $h2, $h3, $h4, $h5, $h6, $fecha],
                    false
                )) {
                    crear_notificacion('error', 'No se ha podido actualizar la incidencia con id [' . $idincidencia . ']
                        , ha ocurrido un error inesperado, recargando datos');
                    exit;
                }
                $insertadas = 1;
            }
            if ($insertadas > 0) {
                crear_log(
                    "info",
                    "Registros creados",
                    $pag,
                    "Se han creado correctamente los registros del usuario
            <span class='rojo'><b>[$id_empleado] $nombre_empleado</b></span> y fecha <span class='rojo'><b>$fecha</b></span>"
                );
            } else {
                crear_log(
                    "error",
                    "Error al insertar registros",
                    $pag,
                    "Ha ocurrido un error al aplicar la incidencia, no se ha podido implementar los registros."
                );
                crear_notificacion('error', 'No se ha podido actualizar la incidencia con id [' . $idincidencia . ']
                        , no se han podido crear los registros, recargando datos');
                exit;
            }
        }
        //hacer suma/resta de horas acumuladas

        if (!consulta("UPDATE `empleados` SET `horas_acu`=horas_acu+? WHERE id=?", [$resolucion, $id_empleado], false)) {
            crear_log(
                "error",
                "Error al actualizar horas acumuladas",
                $pag,
                "No se ha podido actualizar las horas acumuladas del empleado
        <span class='rojo'><b>[$id_empleado] $nombre_empleado</b></span>"
            );
            crear_notificacion('error', 'No se ha podido actualizar la incidencia con id [' . $idincidencia . ']
                        , no se ha podido actualizar las horas acumuladas, recargando datos');
            exit;
        }
        crear_log(
            "info",
            "Horas acumuladas actualizadas",
            $pag,
            "Se ha actualizado las horas acumuladas del empleado
    <span class='rojo'><b>[$id_empleado]</b></span>"
        );

        //Hacer update de incidencias cambiar estado a false

        if (!consulta("UPDATE `incidencias` SET `estado`= false,`id_motivo`= ? WHERE id=?;", [$id_motivo, $idincidencia], false)) {
            crear_log(
                "error",
                "Error al actualizar la incicencia",
                $pag,
                "No se ha podido actualizar la incidencia con id <span class='rojo'><b>$idincidencia</b></span>"
            );
            crear_notificacion('error', 'No se ha podido actualizar la incidencia con id [' . $idincidencia . ']
                        , no se ha podido marcar la incidencia como resuelta, recargando datos');
            exit;
        }
        crear_log(
            "info",
            "Incidencia actualizada",
            $pag,
            "Se ha actualizado la incidencia con id <span class='rojo'><b>$idincidencia</b></span>"
        );
    }
    crear_notificacion('correcto', 'Incicencias actualizadas con éxito, recargando datos');
} else {
    crear_log(
        "error",
        "Error al actualizar la incicencia",
        $pag,
        "No se han podido actualizar las incidencias, porque no ha habido un error en la consulta"
    );
    crear_notificacion('error', 'No se han podido actualizar las incidencias, recargando datos');
}
