<?php
require_once("../functions.php");
if (comprobar_override(str_replace($_SERVER['DOCUMENT_ROOT'], '', __FILE__)))
    exit;
$pag = basename($_SERVER['PHP_SELF']);
comprobar_postget("post", ["id_empleado", "hora1"], $pag, true, "/views/tables/fichajes");
gen_plantilla(true, $pag, false, false, '', false, false);
/*******************************************************************************
 *                               [Parámetros]                                  *
 *******************************************************************************/

$id_empleado = filter_input(INPUT_POST, "id_empleado", FILTER_SANITIZE_NUMBER_INT);
$nombre = consulta("SELECT nombre FROM empleados WHERE id=?;", [$id_empleado], true)[0]["nombre"];
$hora1 = filter_input(INPUT_POST, "hora1", FILTER_SANITIZE_SPECIAL_CHARS);
$hora1 = ($hora1 == "" || $hora1 == "00:00") ? null : $hora1;
$hora2 = filter_input(INPUT_POST, "hora2", FILTER_SANITIZE_SPECIAL_CHARS);
$hora2 = ($hora2 == "" || $hora2 == "00:00") ? null : $hora2;
$hora3 = filter_input(INPUT_POST, "hora3", FILTER_SANITIZE_SPECIAL_CHARS);
$hora3 = ($hora3 == "" || $hora3 == "00:00") ? null : $hora3;
$hora4 = filter_input(INPUT_POST, "hora4", FILTER_SANITIZE_SPECIAL_CHARS);
$hora4 = ($hora4 == "" || $hora4 == "00:00") ? null : $hora4;
$hora5 = filter_input(INPUT_POST, "hora5", FILTER_SANITIZE_SPECIAL_CHARS);
$hora5 = ($hora5 == "" || $hora5 == "00:00") ? null : $hora5;
$hora6 = filter_input(INPUT_POST, "hora6", FILTER_SANITIZE_SPECIAL_CHARS);
$hora6 = ($hora6 == "" || $hora6 == "00:00") ? null : $hora6;
$hora7 = filter_input(INPUT_POST, "hora7", FILTER_SANITIZE_SPECIAL_CHARS);
$hora7 = ($hora7 == "" || $hora7 == "00:00") ? null : $hora7;
$hora8 = filter_input(INPUT_POST, "hora8", FILTER_SANITIZE_SPECIAL_CHARS);
$hora8 = ($hora8 == "" || $hora8 == "00:00") ? null : $hora8;
$hora9 = filter_input(INPUT_POST, "hora9", FILTER_SANITIZE_SPECIAL_CHARS);
$hora9 = ($hora9 == "" || $hora9 == "00:00") ? null : $hora9;
$hora10 = filter_input(INPUT_POST, "hora10", FILTER_SANITIZE_SPECIAL_CHARS);
$hora10 = ($hora10 == "" || $hora10 == "00:00") ? null : $hora10;
$fecha = filter_input(INPUT_POST, "fecha", FILTER_SANITIZE_SPECIAL_CHARS);


$id_incidencia = filter_input(INPUT_POST, 'id_incidencia', FILTER_SANITIZE_NUMBER_INT);


$horas_originales = [$hora1, $hora2, $hora3, $hora4, $hora5, $hora6, $hora7, $hora8, $hora9, $hora10];

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

//Comprobar si existe registro activo de esta fecha con este empleado, si ya existe no lo crea
$registro_existente = consulta("SELECT * FROM registros WHERE id_empleado=? AND fecha=? AND activo=1;", [$id_empleado, $fecha], true);

if (!empty($registro_existente)) {
    if (!isset($_POST['id_incidencia'])) {
        header("Location: " . SITIO_CARPETA . "/views/forms/crear_registro?tipo=error&mensaje=Ya existe un registro para este empleado en esta fecha");
        exit;
    } else {
        header("Location: " . SITIO_CARPETA . "/views/forms/crear_registro?tipo=error&mensaje=Ya existe un registro para este empleado en esta fecha&id_empleado=$id_empleado&fecha=$fecha&id_incidencia=$id_incidencia");
        exit;
    }
}

if (
    !consulta( //Actualizado beta 24w23e
        "INSERT INTO `registros`(`nombre`,`id_empleado`, `hora1`, `hora2`, `hora3`, `hora4`, `hora5`, `hora6`, `hora7`, `hora8`, `hora9`, `hora10`,
    `fecha`)
    VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)",
        [$nombre, $id_empleado, $hora1, $hora2, $hora3, $hora4, $hora5, $hora6, $hora7, $hora8, $hora9, $hora10, $fecha],
        false
    )
) {
    crear_log(
        "error",
        "Error al crear el registro",
        $pag,
        "Error al crear el registro"
    );
    if (!isset($_POST['id_incidencia']))
        header("Location: " . SITIO_CARPETA . "/views/tables/fichajes?tipo=error&mensaje=Error al crear el registro");
    else
        header("Location: " . SITIO_CARPETA . "/views/tables/incidencias?tipo=error&mensaje=Error al crear el registro");
} else {
    if (SISTEMA_INSPECTOR) {
        if (
            !consulta(
                "INSERT INTO `registros_inspector`(`nombre`,`id_empleado`, `hora1`, `hora2`, `hora3`, `hora4`, `hora5`,
         `hora6`, `hora7`, `hora8`, `hora9`, `hora10`, `fecha`)
        VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)",
                [$nombre, $id_empleado, $hora1, $hora2, $hora3, $hora4, $hora5, $hora6, $hora7, $hora8, $hora9, $hora10, $fecha],
                false
            )
        ) {
            crear_log(
                "error",
                "Error al crear el registro inspector",
                $pag,
                "Error al crear el registro para el modo inspector"
            );
        }
    }

    $id = consulta('SELECT id FROM registros ORDER BY id DESC LIMIT 1;', [], true)[0]['id'];

    $aprob = false;
    $id_motivo = filter_input(INPUT_POST, 'id_motivo', FILTER_SANITIZE_NUMBER_INT);

    if (!isset($_POST['no_mostrar_aprobaciones'])) {
        //Guardar modificación de registro para aprobación del empleado
        if (
            !consulta(
                'INSERT INTO `aprobaciones_modificaciones_registros`(`id_registro`,
        `h1_original`, `h2_original`, `h3_original`, `h4_original`, `h5_original`, `h6_original`, `h7_original`, `h8_original`, `h9_original`, `h10_original`,
        `h1_modificada`, `h2_modificada`, `h3_modificada`, `h4_modificada`, `h5_modificada`, `h6_modificada`, `h7_modificada`, `h8_modificada`, `h9_modificada`, `h10_modificada`,
        `tipo`,`id_empleado`, `id_motivo`)
        VALUES (?,
        ?,?,?,?,?,?,?,?,?,?,
        ?,?,?,?,?,?,?,?,?,?,
        "crear",?,?);',
                [$id, ...array_fill(0, 10, null), ...$horas_originales, $id_empleado, $id_motivo],
                false
            )
        ) {
            crear_log(
                "error",
                "Error al guardarlo en aprobaciones",
                $pag,
                "No se ha podido guardar la aprobación con los siguientes datos [" . json_encode([$id, ...$horas_originales, $id_empleado], JSON_UNESCAPED_UNICODE) . "]."
            );
        } else {
            crear_log(
                "info",
                "Aprobación guardada",
                $pag,
                "Se ha guardado la aprobación con los siguientes datos [" . json_encode([$id, ...$horas_originales, $id_empleado], JSON_UNESCAPED_UNICODE) . "]."
            );
            $aprob = true;
        }
    } else
        $aprob = true;


    if (!isset($_POST['id_incidencia'])) {
        $seleccionado = $id;
        if ($aprob)
            header("Location: " . SITIO_CARPETA . "/views/tables/fichajes?tipo=correcto&mensaje=Registro creado correctamente&id_seleccionado=$seleccionado");
        else
            header("Location: " . SITIO_CARPETA . "/views/tables/fichajes?tipo=correcto&mensaje=Registro creado, pero no se ha podido guardar para aprobación&id_seleccionado=$seleccionado");
    } else {
        //Corregir incidencia
        consulta('UPDATE `incidencias` SET `id_motivo`=1,`estado`=0 WHERE id=?;', [$id_incidencia], false);
        if ($aprob)
            header("Location: " . SITIO_CARPETA . "/views/tables/incidencias?tipo=correcto&mensaje=Registro creado e incidencia corregida");
        else
            header("Location: " . SITIO_CARPETA . "/views/tables/incidencias?tipo=correcto&mensaje=Registro creado, se ha corregido la incidencia, pero no se ha podido guardar para aprobación");
    }
}
