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

$nombre = filter_input(INPUT_POST, "nombre", FILTER_SANITIZE_SPECIAL_CHARS);
(!isset($_POST["modificar_horario"])) ? $modificar = 0 : $modificar = 1;
$dia = ['lunh', 'marh', 'mieh', 'jueh', 'vieh', 'sabh', 'domh'];

$tipo = filter_input(INPUT_POST, "tipo", FILTER_SANITIZE_SPECIAL_CHARS);

if (!isset($_POST['tipo']) || $tipo != "flexible") {
    //comprobar si existe horario personalizado;
    if (!isset($_POST["id"]) || (empty($id = consulta("SELECT id FROM `grupos` WHERE `nombre`=?;", [$nombre], true)[0]['id']))) { //CREATE
        $consulta = "INSERT INTO `grupos`(`id`,`nombre`,`tipo_grupo`,`cambiar_horas`";
        $consulta2 = "VALUES (NULL,?,0,?";
        $arrayvals = [$nombre, $modificar];
        for ($i = 0; $i < 7; $i++) {
            for ($j = 1; $j <= 10; $j++) {
                if (isset($_POST[$dia[$i] . $j]) && !empty($_POST[$dia[$i] . $j])) {
                    $arrayvals[] = filter_input(INPUT_POST, $dia[$i] . $j, FILTER_SANITIZE_SPECIAL_CHARS);
                    $consulta .= ",`" . $dia[$i] . $j . "`";
                    $consulta2 .= ",?";
                }
            }
        }
        $consulta .= ") " . $consulta2 . ");";
    } else { //UPDATE
        $grupo_ant = consulta("SELECT * FROM `grupos` WHERE `id`=?;", [$id], true)[0];
        $consulta = "UPDATE `grupos` SET `tipo_grupo`=0,`cambiar_horas`=?,";
        $arrayvals[] = $modificar;
        for ($i = 0; $i < 7; $i++) {
            for ($j = 1; $j <= 10; $j++) {
                if (isset($_POST[$dia[$i] . $j]) && !empty($_POST[$dia[$i] . $j]) && $_POST[$dia[$i] . $j] != '00:00') {
                    $arrayvals[] = filter_input(INPUT_POST, $dia[$i] . $j, FILTER_SANITIZE_SPECIAL_CHARS);
                    $consulta .= "`" . $dia[$i] . $j . "`=?,";
                } else {
                    //comprobar si antes tenía algo y ahora lo ha quitado, se convierte en NULL
                    if (isset($grupo_ant[$dia[$i] . $j]) && !empty($grupo_ant[$dia[$i] . $j])) {
                        $arrayvals[] = null;
                        $consulta .= "`" . $dia[$i] . $j . "`=?,";
                    }
                }
            }
        }
        //quitar la última coma
        $consulta = substr($consulta, 0, -1) . " WHERE id=?;";
        $arrayvals[] = $id;
    }

    /*Consulta */
    if (!isset($_POST["id"])) { //Si no existe id es crear
        if (!consulta($consulta, $arrayvals, false)) {
            crear_log(
                "error",
                "Error al crear grupo",
                $pag,
                "No se ha podido crear el grupo, porque ha ocurrido un error en la consulta."
            );
            header("Location: " . SITIO_CARPETA . "/views/forms/grupos?tipo=error&mensaje=No se ha podido crear el grupo");
        } else {
            crear_log(
                "info",
                "Grupo creado",
                $pag,
                "Se ha creado el grupo correctamente."
            );
            header("Location: " . SITIO_CARPETA . "/views/tables/grupos?tipo=correcto&mensaje=Grupo creado correctamente");
        }
    } else { //Si existe modificar
        $id = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);
        if (!consulta($consulta, $arrayvals, false)) { //Modificado beta 24w23d
            crear_log(
                "error",
                "Error al actualizar grupo",
                $pag,
                "No se ha podido actualizar el grupo <span class='rojo'><b>$nombre<b>, porque ha ocurrido un error en la consulta.</span>"
            );
            header("Location: " . SITIO_CARPETA . "/views/tables/grupos?tipo=error&mensaje=El grupo no se ha podido modificar");
        } else {
            crear_log(
                "info",
                "Grupo actualizado",
                $pag,
                "Se han actualizado los datos del grupo <span class='rojo'><b>$nombre<b></span>"
            );
            header("Location: " . SITIO_CARPETA . "/views/tables/grupos?tipo=correcto&mensaje=El grupo ha sido modificado correctamente");
        }
    }
} else {
    $tipo_flexible = filter_input(INPUT_POST, "flexible-tipo", FILTER_SANITIZE_SPECIAL_CHARS);
    $tipo_flexible = match ($tipo_flexible) {
        'diario' => 1,
        'semanal' => 2,
        default => 0
    };
    $horas = filter_input(INPUT_POST, "horas-semanal", FILTER_SANITIZE_SPECIAL_CHARS);
    $dias_trabaja_semana = filter_input(INPUT_POST, "dias_trabaja_semana", FILTER_SANITIZE_SPECIAL_CHARS);

    if (!isset($_POST["id"]) || (empty($id = consulta("SELECT id FROM `grupos` WHERE `nombre`=?;", [$nombre], true)[0]['id']))) { //CREATE
        if (
            !consulta(
                'INSERT INTO `grupos`(`nombre`,`tipo_grupo`,`tipo_flexible`,`horas`,`dias_trabaja_semana`,
            `lunes`,`martes`,`miercoles`,`jueves`,`viernes`,`sabado`,`domingo`,
            `lunh`,`marh`,`mieh`,`jueh`,`vieh`,`sabh`,`domh`,
            `cambiar_horas`)
            VALUES(?,1,?,?,?,
            ?,?,?,?,?,?,?,
            ?,?,?,?,?,?,?,
            ?);',
                [
                    $nombre,
                    $tipo_flexible,
                    $horas,
                    $dias_trabaja_semana,
                    (isset($_POST['lunes']) ? 1 : 0),
                    (isset($_POST['martes']) ? 1 : 0),
                    (isset($_POST['miercoles']) ? 1 : 0),
                    (isset($_POST['jueves']) ? 1 : 0),
                    (isset($_POST['viernes']) ? 1 : 0),
                    (isset($_POST['sabado']) ? 1 : 0),
                    (isset($_POST['domingo']) ? 1 : 0),
                    filter_input(INPUT_POST, 'horas-lunes', FILTER_SANITIZE_SPECIAL_CHARS),
                    filter_input(INPUT_POST, 'horas-martes', FILTER_SANITIZE_SPECIAL_CHARS),
                    filter_input(INPUT_POST, 'horas-miercoles', FILTER_SANITIZE_SPECIAL_CHARS),
                    filter_input(INPUT_POST, 'horas-jueves', FILTER_SANITIZE_SPECIAL_CHARS),
                    filter_input(INPUT_POST, 'horas-viernes', FILTER_SANITIZE_SPECIAL_CHARS),
                    filter_input(INPUT_POST, 'horas-sabado', FILTER_SANITIZE_SPECIAL_CHARS),
                    filter_input(INPUT_POST, 'horas-domingo', FILTER_SANITIZE_SPECIAL_CHARS),
                    $modificar
                ],
                false
            )
        ) {
            crear_log(
                "error",
                "Error al crear grupo",
                $pag,
                "No se ha podido crear el grupo, porque ha ocurrido un error en la consulta."
            );
            header("Location: " . SITIO_CARPETA . "/views/forms/grupos?tipo=error&mensaje=No se ha podido crear el grupo");
        } else {
            crear_log(
                "info",
                "Grupo creado",
                $pag,
                "Se ha creado el grupo correctamente."
            );
            header("Location: " . SITIO_CARPETA . "/views/tables/grupos?tipo=correcto&mensaje=Grupo creado correctamente");
        }
    } else { //UPDATE
        if (
            !consulta(
                'UPDATE `grupos` SET `nombre`=?,`tipo_grupo`=1,`tipo_flexible`=?,`horas`=?,`dias_trabaja_semana`=?,
            `lunes`=?,`martes`=?,`miercoles`=?,`jueves`=?,`viernes`=?,`sabado`=?,`domingo`=?,
            `lunh`=?,`marh`=?,`mieh`=?,`jueh`=?,`vieh`=?,`sabh`=?,`domh`=?,
            `cambiar_horas`=? WHERE id=?;',
                [
                    $nombre,
                    $tipo_flexible,
                    $horas,
                    $dias_trabaja_semana,
                    (isset($_POST['lunes']) ? 1 : 0),
                    (isset($_POST['martes']) ? 1 : 0),
                    (isset($_POST['miercoles']) ? 1 : 0),
                    (isset($_POST['jueves']) ? 1 : 0),
                    (isset($_POST['viernes']) ? 1 : 0),
                    (isset($_POST['sabado']) ? 1 : 0),
                    (isset($_POST['domingo']) ? 1 : 0),
                    filter_input(INPUT_POST, 'horas-lunes', FILTER_SANITIZE_SPECIAL_CHARS),
                    filter_input(INPUT_POST, 'horas-martes', FILTER_SANITIZE_SPECIAL_CHARS),
                    filter_input(INPUT_POST, 'horas-miercoles', FILTER_SANITIZE_SPECIAL_CHARS),
                    filter_input(INPUT_POST, 'horas-jueves', FILTER_SANITIZE_SPECIAL_CHARS),
                    filter_input(INPUT_POST, 'horas-viernes', FILTER_SANITIZE_SPECIAL_CHARS),
                    filter_input(INPUT_POST, 'horas-sabado', FILTER_SANITIZE_SPECIAL_CHARS),
                    filter_input(INPUT_POST, 'horas-domingo', FILTER_SANITIZE_SPECIAL_CHARS),
                    $modificar,
                    $id
                ],
                false
            )
        ) {
            crear_log(
                "error",
                "Error al actualizar grupo",
                $pag,
                "No se ha podido actualizar el grupo <span class='rojo'><b>$nombre<b>, porque ha ocurrido un error en la consulta.</span>"
            );
            header("Location: " . SITIO_CARPETA . "/views/tables/grupos?tipo=error&mensaje=El grupo no se ha podido modificar");
        } else {
            crear_log(
                "info",
                "Grupo actualizado",
                $pag,
                "Se han actualizado los datos del grupo <span class='rojo'><b>$nombre<b></span>"
            );
            header("Location: " . SITIO_CARPETA . "/views/tables/grupos?tipo=correcto&mensaje=El grupo ha sido modificado correctamente");
        }
    }
}
