"use strict" //activo modo estricto
import {Router} from './router.js'
import {Modelo} from '../modelos/modelo.js'
import { VistaInscripcion } from '../vistas/inscripcion/vistainscripcion.js'
import {VistaPago} from '../vistas/pago/vistapago.js'
import {VistaConfirmacion} from '../vistas/confirmacion/vistaconfirmacion.js'
import { VistaFotos } from '../vistas/fotos/vistafotos.js'
import { VistaClasificacion } from '../vistas/clasificacion/vistaclasificacion.js'
import { VistaInicio } from '../vistas/inicio/vistainicio.js'
/**
* Clase Controlador que maneja todo lo de la web pública
*/
export class Controlador{
constructor() {
$(document).ready(this.iniciar.bind(this))
this.router=new Router;
this.modelo=new Modelo;
//Ejecutamos el mostrarInicio para que muestre la vista del inicio
this.mostrarInicio()
}
/**
* Método que inicia la web y añede los métodos a los botones
*/
iniciar(){
//Nav
let boton= document.getElementById('inscripciones')
boton.onclick=this.mostrarInscripciones.bind(this)
let inicio= document.getElementById('inicio')
inicio.onclick=this.mostrarInicio.bind(this)
let icono= document.getElementById('sanromilla')
icono.onclick=this.mostrarInicio.bind(this)
let clasificacion= document.getElementById('clasificacion')
clasificacion.onclick=this.mostrarClasificacion.bind(this)
let fotos= document.getElementById('fotos')
fotos.onclick=this.mostrarFotos.bind(this)
}
/**
* Método que oculta el menú
* Como el menú está hecho con bootstrap, trae por defecto algunas clase como la de show que es la que muestra el desplegable del menu
* Con este método le quitamos esa tabla cuando hacemos click a alguna opción del menu
*/
ocultarMenu(){
let desplegable=$('#collapsibleNavbar')
desplegable.removeClass('show');
}
/**
* Método que muestra la vista Inicio
*/
async mostrarInicio(){
window.scrollTo(0, 0);
this.router.cargar("inicio")
this.vistaFotos= new VistaInicio (this)
//this.ocultarMenu()
}
async mostrarInscripciones(datos) {
window.scrollTo(0, 0);
this.ocultarMenu();
this.router.cargar("inscripcion");
try {
const fechasString = await this.obtenerFechasInscripcion();
const fechas = JSON.parse(fechasString);
if (!fechas || fechas.length === 0) {
console.error("Error: No date data found.");
return;
}
console.log("fechas:", fechas);
// Access the first object in the array and log its properties
const firstFechas = fechas[0];
console.log("firstFechas:", firstFechas);
// Log individual date properties
console.log("fecha_actual:", firstFechas.fecha_actual);
console.log("inicio_inscripcion:", firstFechas.inicio_inscripcion);
console.log("fin_inscripcion:", firstFechas.fin_inscripcion);
// Create Date objects
const fechaActual = new Date(firstFechas.fecha_actual);
const inicioInscripcion = new Date(firstFechas.inicio_inscripcion);
const finInscripcion = new Date(firstFechas.fin_inscripcion);
console.log("fechaActual:", fechaActual);
console.log("inicioInscripcion:", inicioInscripcion);
console.log("finInscripcion:", finInscripcion);
// Check if the current date is between the start and end dates
if (fechaActual >= inicioInscripcion && fechaActual <= finInscripcion) {
this.vistaInscripcion = new VistaInscripcion(this, datos);
} else {
console.log("wawawawa");
this.mostrarCerradas();
}
} catch (error) {
console.error("Error:", error);
}
}
/**
* Método que muestra la vista pago
*/
mostrarPago(inscripciones, correo){
window.scrollTo(0, 0);
this.ocultarMenu()
this.router.cargar("pago")
this.vistaPago=new VistaPago(this,inscripciones,correo)
}
/**
* Método que muestra la vista fotos
*/
mostrarFotos(){
window.scrollTo(0, 0);
this.ocultarMenu()
this.router.cargar("fotos")
this.vistaFotos= new VistaFotos (this)
}
mostrarCerradas(){
window.scrollTo(0, 0);
this.ocultarMenu()
this.router.cargar("cerradas")
this.vistaInscripcion=new VistaInscripcion(this)
}
/**
* Método que muestra la vista clasificacion
*/
mostrarClasificacion(){
window.scrollTo(0, 0);
this.ocultarMenu()
this.router.cargar('clasificacion')
this.vistaClasificacion= new VistaClasificacion(this)
}
/**
* Método que muestra la vista confirmación
* @param {array} datos
*/
mostrarConfirmacion(datos){
window.scrollTo(0, 0);
this.ocultarMenu()
this.router.cargar("confirmacion")
this.vistaConfirmacion = new VistaConfirmacion(this, datos)
}
/**
* Método que llama al modelo y recibe las categorias de la bbdd
* @returns array de categorias
*/
async sacarCategorias(){
console.log('estoy en aaap')
let datos = await this.modelo.getCategorias()
return datos;
}
/**
* Método que llama al modelo y recibe todos los códigos de la bbdd
* @returns array
*/
async sacarCodigos(){
let datos =await this.modelo.getCodigos()
return datos.data
}
/**
* Método que llama al modelo y recibe todos los datos de la clasificacion
* @returns array
*/
async getClasificacion(){
return []
}
/**
* Método que llama al modelo y recibe todos las fotos de la bbdd
* @returns array
*/
async getFotos(){
let datos =await this.modelo.getFotos()
return datos.data
}
/**
* Método que inserta el código de inscripción en la bbdd
* @param {int} id
* @param {string} codigo
*/
async insertarInscripciones(inscripciones, codigo, correo){
console.log('CORREO'+ correo)
let respuesta = await this.modelo.insertarInscripciones(inscripciones, codigo, correo)
console.log(respuesta.data);
if(respuesta.data!=1){
console.log('Ha ocurrido un error')
}
}
/**
* Método que obtiene las fechas de inicio y fin de inscripción
* @returns {Promise<Object>} Objeto con las fechas de inicio y fin
*/
async obtenerFechasInscripcion() {
try {
const fechas = await this.modelo.getFechasInscripcion();
return fechas.data; // Suponiendo que las fechas se devuelven como un objeto con propiedades 'fechaInicio' y 'fechaFin'
} catch (error) {
console.error("Error al obtener las fechas de inscripción:", error);
return null;
}
}
/**
* Método que obtiene el precio de las camisetas y la foto de la San Romilla
* @returns {Promise<Object>} Objeto con la foto y el precio.
*/
async obtenerInformacion() {
try {
const informacion = await this.modelo.getInformacion();
return informacion.data;
} catch (error) {
console.error("Error al obtener la informacion:", error);
return null;
}
}
/**
* Método que obtiene el reglamento
*/
async obtenerReglamento() {
try {
const reglamento = await this.modelo.getReglamento();
return reglamento.data;
} catch (error) {
console.error("Error al obtener el reglamento:", error);
return null;
}
}
}
const app= new Controlador()