<?php
require_once dirname(__DIR__) . "/app/functions.php";
$pag = basename($_SERVER['PHP_SELF']);

/**
 * Esta tarea cron comprueba los registros para aplicarlos en la tabla de registros inspector si los empleados
 * han realizado las horas que deberían
 */

if (!SISTEMA_INSPECTOR) exit;

//Coger ultima fecha que no sea hoy y aplicar arreglo en esa fecha
$fecha = date('Y-m-d', strtotime('-1 day'));

$nom_dias = [
    0 => 'domh',
    1 => 'lunh',
    2 => 'marh',
    3 => 'mieh',
    4 => 'jueh',
    5 => 'vieh',
    6 => 'sabh',
    7 => 'domh'
];
$num_dia = date('N', strtotime('-1 day'));
$hoy = $nom_dias[$num_dia]; //Hoy es el día de ayer realmente

//Coger todos los empleados que tenga horario asignado

$empleados = consulta('SELECT id,nombre FROM empleados WHERE sin_horario_asignado=0;', [], true);

for ($i = 0; $i < count($empleados); $i++) {
    //Comprobar si ha fichado hoy en el registro normal
    if(empty($registo_act=consulta(
        "SELECT * FROM registros WHERE id_empleado=? AND fecha=? AND activo=1;",
        [$empleados[$i]['id'], $fecha],
        true
    ))) continue;

    //saber horario del empleado
    $horario = consulta(
        "SELECT $hoy" . "1" . ", $hoy" . "2" . ", $hoy" . "3" . ", $hoy" . "4" . ", $hoy" . "5" . ", $hoy" . "6" . " 
        FROM empleados WHERE id=?;",
        [$empleados[$i]['id']],
        true
    );
    //Aplicar horario relativo con intervalo de minutos
    $h1 = (!empty($horario[0][$hoy . "1"]) && $horario[0][$hoy . "1"] != "00:00:00") ? (new DateTime($horario[0][$hoy . "1"]))->modify(mt_rand(MINUTOS_NEGATIVOS, MINUTOS_POSITIVOS) . " minutes")->format('H:i:s') : NULL;
    $h2 = (!empty($horario[0][$hoy . "2"]) && $horario[0][$hoy . "2"] != "00:00:00") ? (new DateTime($horario[0][$hoy . "2"]))->modify(mt_rand(MINUTOS_NEGATIVOS, MINUTOS_POSITIVOS) . " minutes")->format('H:i:s') : NULL;
    $h3 = (!empty($horario[0][$hoy . "3"]) && $horario[0][$hoy . "3"] != "00:00:00") ? (new DateTime($horario[0][$hoy . "3"]))->modify(mt_rand(MINUTOS_NEGATIVOS, MINUTOS_POSITIVOS) . " minutes")->format('H:i:s') : NULL;
    $h4 = (!empty($horario[0][$hoy . "4"]) && $horario[0][$hoy . "4"] != "00:00:00") ? (new DateTime($horario[0][$hoy . "4"]))->modify(mt_rand(MINUTOS_NEGATIVOS, MINUTOS_POSITIVOS) . " minutes")->format('H:i:s') : NULL;
    $h5 = (!empty($horario[0][$hoy . "5"]) && $horario[0][$hoy . "5"] != "00:00:00") ? (new DateTime($horario[0][$hoy . "5"]))->modify(mt_rand(MINUTOS_NEGATIVOS, MINUTOS_POSITIVOS) . " minutes")->format('H:i:s') : NULL;
    $h6 = (!empty($horario[0][$hoy . "6"]) && $horario[0][$hoy . "6"] != "00:00:00") ? (new DateTime($horario[0][$hoy . "6"]))->modify(mt_rand(MINUTOS_NEGATIVOS, MINUTOS_POSITIVOS) . " minutes")->format('H:i:s') : NULL;

    //Si hoy no trabaja se salta
    if(empty($h1) && empty($h2) && empty($h3) && empty($h4) && empty($h5) && empty($h6)) continue;

    //Eliminar si existe registro de este empleado hoy
    if (!consulta(
        "DELETE FROM registros_inspector WHERE id_empleado=? AND fecha=?;",
        [$empleados[$i]['id'], $fecha],
        false
    )) {
        crear_log(
            "error",
            "Error al eliminar registro inspector",
            $pag,
            "No se ha podido eliminar el registro de inspector porque ha ocurrido un error en la consulta. [" . $empleados[$i]['nombre'] . "," . $empleados[$i]['id'] . "," . $fecha . "]"
        );
    }

    //Añadir registro inspector con horario relativo

    if (!consulta(
        "INSERT INTO registros_inspector (nombre,id_empleado,hora1,hora2,hora3,hora4,hora5,hora6,fecha,mensaje,latitudh1,longitudh1,latitudh2,longitudh2,latitudh3,longitudh3,latitudh4,longitudh4,latitudh5,longitudh5,latitudh6,longitudh6) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);",
        [
            $empleados[$i]['nombre'],
            $empleados[$i]['id'],
            $h1,
            $h2,
            $h3,
            $h4,
            $h5,
            $h6,
            $fecha,
            $registo_act[0]['mensaje'],
            $registo_act[0]['latitudh1'],
            $registo_act[0]['longitudh1'],
            $registo_act[0]['latitudh2'],
            $registo_act[0]['longitudh2'],
            $registo_act[0]['latitudh3'],
            $registo_act[0]['longitudh3'],
            $registo_act[0]['latitudh4'],
            $registo_act[0]['longitudh4'],
            $registo_act[0]['latitudh5'],
            $registo_act[0]['longitudh5'],
            $registo_act[0]['latitudh6'],
            $registo_act[0]['longitudh6']
        ],
        false
    )) {
        crear_log(
            "error",
            "Error al añadir registro inspector",
            $pag,
            "No se ha podido añadir el registro de inspector porque ha ocurrido un error en la consulta. [" . $empleados[$i]['nombre'] . "," . $empleados[$i]['id'] . "," . $h1 . "," . $h2 . "," . $h3 . "," . $h4 . "," . $h5 . "," . $h6 . "," . $fecha . "]"
        );
    }else{
        crear_log(
            "info",
            "Añadido registro inspector",
            $pag,
            "Se ha añadido el registro de inspector. [" . $empleados[$i]['nombre'] . "," . $empleados[$i]['id'] . "," . $h1 . "," . $h2 . "," . $h3 . "," . $h4 . "," . $h5 . "," . $h6 . "," . $fecha . "]"
        );
    }
}
