<?php

/*
 * Copyright (C) 2021 Ángel Benítez Hernández, Echedey López Romero
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

// Mostrar errores en pantalla
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

// Reparar salida con Tidy
ini_set('tidy.clean_output', '1');

// Vaciar caché navegador
header('Cache-Control: no-cache');
header('Pragma: no-cache');

// Cargar funciones
require './funciones.php';

// Cargar variables
require './variables.php';

// Operación principal
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['operacion'])
&& $_POST['operacion'] === 'procesar') {
    if (isset($_POST['representacion']) && $_POST['representacion'] !== '') {
        $Dato = FiltrarValor($_POST['representacion']);

        ValidarRepresentacion($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha establecido quien presenta el formulario.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['documento']) && $_POST['documento'] !== '') {
        $Dato = FiltrarValor($_POST['documento']);

        ValidarDocumento($Dato, $Documentos, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el tipo de documento.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['identificacion']) && $_POST['identificacion'] !== '') {
        $Dato = FiltrarValor($_POST['identificacion']);

        ValidarIdentificacion($Dato, $Respuestas['documento'], $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el número de identificación.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['nombre']) && $_POST['nombre'] !== '') {
        $Dato = FiltrarValor($_POST['nombre']);

        ValidarNombre($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el nombre.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['primer_apellido']) && $_POST['primer_apellido'] !== '') {
        $Dato = FiltrarValor($_POST['primer_apellido']);

        ValidarPrimerApellido($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el primer apellido.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['segundo_apellido']) && $_POST['segundo_apellido'] !== '') {
        $Dato = FiltrarValor($_POST['segundo_apellido']);

        ValidarSegundoApellido($Dato, $Respuestas, $Errores);
    }

    if (isset($_POST['calidad_de']) && $_POST['calidad_de'] !== '') {
        $Dato = FiltrarValor($_POST['calidad_de']);

        ValidarCalidadDe($Dato, $Calidades, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado quien está en propiedad de los
        teléfonos.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['telefono_fijo']) && $_POST['telefono_fijo'] !== '') {
        $Dato = FiltrarValor($_POST['telefono_fijo']);

        ValidarTelefonoFijo($Dato, $Respuestas, $Errores);
    }

    if (isset($_POST['telefono_movil']) && $_POST['telefono_movil'] !== '') {
        $Dato = FiltrarValor($_POST['telefono_movil']);

        ValidarTelefonoMovil($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el teléfono móvil.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['email']) && $_POST['email'] !== '') {
        $Dato = FiltrarValor($_POST['email']);

        ValidarEmail($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado una dirección de correo '
                . 'electrónico.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['tipo_via']) && $_POST['tipo_via'] !== '') {
        $Dato = FiltrarValor($_POST['tipo_via']);

        ValidarTipoVia($Dato, $TiposVia, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el tipo de vía.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['nombre_via']) && $_POST['nombre_via'] !== '') {
        $Dato = FiltrarValor($_POST['nombre_via']);

        ValidarNombreVia($Dato, $Respuestas['tipo_via'], $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el nombre de la vía.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['numero']) && $_POST['numero'] !== '') {
        $Dato = FiltrarValor($_POST['numero']);

        ValidarNumero($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el número del domicilio.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['bloque']) && $_POST['bloque'] !== '') {
        $Dato = FiltrarValor($_POST['bloque']);

        ValidarBloque($Dato, $Respuestas, $Errores);
    }

    if (isset($_POST['escalera']) && $_POST['escalera'] !== '') {
        $Dato = FiltrarValor($_POST['escalera']);

        ValidarEscalera($Dato, $Respuestas, $Errores);
    }

    if (isset($_POST['piso']) && $_POST['piso'] !== '') {
        $Dato = FiltrarValor($_POST['piso']);

        ValidarPiso($Dato, $Respuestas, $Errores);
    }

    if (isset($_POST['portal']) && $_POST['portal'] !== '') {
        $Dato = FiltrarValor($_POST['portal']);

        ValidarPortal($Dato, $Respuestas, $Errores);
    }

    if (isset($_POST['letra']) && $_POST['letra'] !== '') {
        $Dato = FiltrarValor($_POST['letra']);

        ValidarLetra($Dato, $Respuestas, $Errores);
    }

    if (isset($_POST['puerta']) && $_POST['puerta'] !== '') {
        $Dato = FiltrarValor($_POST['puerta']);

        ValidarPuerta($Dato, $Respuestas, $Errores);
    }

    if (isset($_POST['complemento']) && $_POST['complemento'] !== '') {
        $Dato = FiltrarValor($_POST['complemento']);

        ValidarComplemento($Dato, $Respuestas, $Errores);
    }

    if (isset($_POST['fecha']) && $_POST['fecha'] !== '') {
        $Dato = FiltrarValor($_POST['fecha']);

        ValidarFecha($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado la fecha.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['pais']) && $_POST['pais'] !== '') {
        $Dato = FiltrarValor($_POST['pais']);

        ValidarPais($Dato, $Paises, $Respuestas, $Errores);
    } else {
        $Errores = 'No se ha especificado el país.';
    }

    if (isset($_POST['provincia']) && $_POST['provincia'] !== '') {
        $Dato = FiltrarValor($_POST['provincia']);

        ValidarProvincia($Dato, $Respuestas['pais'],
                $Paises, $Provincias, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado la provincia.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['isla']) && $_POST['isla'] !== '') {
        $Dato = FiltrarValor($_POST['isla']);
        $ValoresPosibles = GenerarValoresPosibles($Islas,
                $Respuestas['provincia'], 'provincia_id');

        ValidarIsla($Dato, $ValoresPosibles, $Respuestas, $Errores);
    } else {
        $Errores = 'No se ha especificado la isla.';
    }

    if (isset($_POST['municipio']) && $_POST['municipio'] !== '') {
        $Dato = FiltrarValor($_POST['municipio']);
        $ValoresPosibles = GenerarValoresPosibles($Municipios,
                $Respuestas['isla'], 'isla_id');

        ValidarMunicipio($Dato, $ValoresPosibles, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el municipio.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['localidad']) && $_POST['localidad'] !== '') {
        $Dato = FiltrarValor($_POST['localidad']);
        $ValoresPosibles = GenerarValoresPosibles($Localidades,
                $Respuestas['municipio'], 'municipio_id');

        ValidarLocalidad($Dato, $ValoresPosibles, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado la localidad.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['cp']) && $_POST['cp'] !== '') {
        $Dato = FiltrarValor($_POST['cp']);
        $ValoresPosibles = GenerarValoresPosibles($CPs,
                $Respuestas['municipio'], 'municipio_id');

        ValidarCP($Dato, $Respuestas['localidad'], $ValoresPosibles, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el código postal (CP).';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['horfandad']) && $_POST['horfandad'] !== '') {
        $Dato = FiltrarValor($_POST['horfandad']);

        ValidarHorfandad($Dato, $Respuestas);
    }

    if (isset($_POST['tutela_guarda']) && $_POST['tutela_guarda'] !== '') {
        $Dato = FiltrarValor($_POST['tutela_guarda']);

        ValidarTutelaGuarda($Dato, $Respuestas);
    }

    if (isset($_POST['observaciones']) && $_POST['observaciones'] !== '') {
        $Dato = FiltrarValor($_POST['observaciones']);

        ValidarObservaciones($Dato, $Respuestas, $Errores);
    }

    if (isset($_POST['itinerario']) && $_POST['itinerario'] !== '') {
        $Dato = FiltrarValor($_POST['itinerario']);

        ValidarItinerario($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado un itinerario.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['lengua_literatura_1']) && $_POST['lengua_literatura_1'] !== '') {
        $Dato = FiltrarValor($_POST['lengua_literatura_1']);

        ValidarLenguaLiteratura1($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha seleccionado la asignatura de Lengua Castellana '
                . 'y Literatura en el Bloque 1.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['filosofia']) && $_POST['filosofia'] !== '') {
        $Dato = FiltrarValor($_POST['filosofia']);

        ValidarFilosofia($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha seleccionado la asignatura de Filosofía en el '
                . 'Bloque 1.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['ed_fisica']) && $_POST['ed_fisica'] !== '') {
        $Dato = FiltrarValor($_POST['ed_fisica']);

        ValidarEdFisica($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha seleccionado la asignatura de Educación Física '
                . 'en el Bloque 1.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['matematicas_1']) && $_POST['matematicas_1'] !== '') {
        $Dato = FiltrarValor($_POST['matematicas_1']);

        ValidarMatematicas1($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha seleccionado la asignatura de Matemáticas I '
                . 'en el Bloque 1.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['fisica_quimica']) && $_POST['fisica_quimica'] !== '') {
        $Dato = FiltrarValor($_POST['fisica_quimica']);

        ValidarFisicaQuimica($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha seleccionado la asignatura de Física y Química '
                . 'en el Bloque 1.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['tutoria']) && $_POST['tutoria'] !== '') {
        $Dato = FiltrarValor($_POST['tutoria']);

        ValidarTutoria($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha seleccionado la asignatura de Tutoría en el '
                . 'en el Bloque 1.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['optativa_1']) && $_POST['optativa_1'] !== '') {
        $Dato = FiltrarValor($_POST['optativa_1']);

        ValidarOptativa1($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado la optativa del Bloque 2.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['optativa_2']) && $_POST['optativa_2'] !== '') {
        $Dato = FiltrarValor($_POST['optativa_2']);

        ValidarOptativa2($Dato, $Respuestas['itinerario'],
                $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado la optativa del Bloque 3.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['optativa_3']) && $_POST['optativa_3'] !== '') {
        $Dato = FiltrarValor($_POST['optativa_3']);

        ValidarOptativa3($Dato, $Respuestas['itinerario'],
                $Respuestas['optativa_1'], $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado la optativa del Bloque 4.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['optativa_4']) && $_POST['optativa_4'] !== '') {
        $Dato = FiltrarValor($_POST['optativa_4']);

        ValidarOptativa4($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado la optativa del Bloque 5.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['tratamiento']) && $_POST['tratamiento'] !== '') {
        $Dato = FiltrarValor($_POST['tratamiento']);

        ValidarTratamiento($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el consentimiento del tratamiento '
                . 'de datos general.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['difusion_web']) && $_POST['difusion_web'] !== '') {
        $Dato = FiltrarValor($_POST['difusion_web']);

        ValidarDifusionWeb($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el consentimiento de la difusión '
                . 'en el sitio web.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['difusion_app']) && $_POST['difusion_app'] !== '') {
        $Dato = FiltrarValor($_POST['difusion_app']);

        ValidarDifusionApp($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el consentimiento de la difusión en
        la app.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_POST['difusion_facebook']) && $_POST['difusion_facebook'] !== '') {
        $Dato = FiltrarValor($_POST['difusion_facebook']);

        ValidarDifusionFacebook($Dato, $Respuestas, $Errores);
    } else {
        $Mensaje = 'No se ha especificado el consentimiento de la difusión en
        Facebook.';
        array_push($Errores, $Mensaje);
    }

    if (isset($_FILES['fichero_identificacion']) && $_FILES['fichero_identificacion']['tmp_name'] !== '') {
        $Dato = $_FILES['fichero_identificacion'];

        ValidarFichero($Dato, 'fichero_identificacion', $Respuestas, $Errores);
    }

    if (isset($_FILES['fichero_certificacion']) && $_FILES['fichero_certificacion']['tmp_name'] !== '') {
        $Dato = $_FILES['fichero_certificacion'];

        ValidarFichero($Dato, 'fichero_certificacion', $Respuestas, $Errores);
    }

    if (count($Errores) === 0) {
        GuardarRespuestas($Respuestas, './almacen/datos.json');
        $Resultado = '<span class="font-weight-bold d-block p-2 text-center rounded correcto">Su solicitud será '
                . 'procesada. En breve nos pondremos en contacto con ud para '
                . 'facilitarle más información.' . '</span>';
    } else {
        $Resultado = ImprimirErrores($Errores);
    }

}

// Cargar vista
require './vista.php';
