<?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]                                 *
 *******************************************************************************/
$idincidencia = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);
$motivo = filter_input(INPUT_POST, "motivo", FILTER_SANITIZE_NUMBER_INT);
$id_empleado = filter_input(INPUT_POST, "id_empleado", FILTER_SANITIZE_NUMBER_INT);
$fecha = filter_input(INPUT_POST, "fecha", FILTER_SANITIZE_SPECIAL_CHARS);
/*******************************************************************************
 *                                 [Consulta]                                  *
 *******************************************************************************/
//comprobar si el motivo hay que modificar horario
$motivos = consulta("SELECT resolucion, modificar_horario FROM motivos WHERE id=?;", [$motivo], true);

if (!empty($motivos)) {
    if ($motivos[0]["modificar_horario"] == 1) {
        $resolucion = $motivos[0]["resolucion"];
        //  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 = !empty($trab) ? $trab[0]['id_grupo'] : null;
        $grup = !empty($id_grupo) ? consulta("SELECT * FROM grupos WHERE id=?;", [$id_grupo], true) : [];

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

        $norm = function($v){ return ($v === '00:00' || $v === '00:00:00' || $v === '' ) ? null : $v; };
        $h1 = $norm($h1); $h2 = $norm($h2); $h3 = $norm($h3); $h4 = $norm($h4); $h5 = $norm($h5); $h6 = $norm($h6);

        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 correctamente, ha ocurrido un error interno');
            exit;
        }
        $nombre_empleado = consulta("SELECT nombre FROM empleados WHERE id=?;", [$id_empleado], true)[0]["nombre"];
        crear_log(
            "info",
            "Registros eliminados",
            $pag,
            "Se han eliminado correctamente los registros del usuario
        <span class='rojo'><b>[$id_empleado] $nombre_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
            )) {
                throw new Exception("Ha ocurrido un error inesperado.");
            }
            $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 correctamente, no se han podido crear los registros');
            exit;
        }
    } else $resolucion=0;
    //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 correctamente, no se ha podido actualizar las horas acumuladas');
        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=?;", [$motivo, $idincidencia], false)) {
        crear_log(
            "error",
            "Error al actualizar la incidencia",
            $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 correctamente,no se ha podido marcar la incidencia como resuelta');
        exit;
    }
    crear_log(
        "info",
        "Incidencia actualizada",
        $pag,
        "Se ha actualizado la incidencia con id <span class='rojo'><b>$idincidencia</b></span>"
    );
    crear_notificacion('correcto', 'incidencia actualizada con éxito');
} else {
    crear_log(
        "error",
        "Error al actualizar la incidencia",
        $pag,
        "No se ha podido actualizar la incidencia con id <span class='rojo'><b>$idincidencia</b></span>, porque ha ocurrido un error en la consulta"
    );
    crear_notificacion('error', 'No se ha podido actualizar la incidencia, debes escoger un motivo');
}
