package com.example.demo.controllers;

import com.example.demo.Dominio;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import java.net.MalformedURLException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Optional;

/** Para esto caso con UN SOLO CONTROLADOR es suficiente */
@Controller
public class MainController {

	Dominio dom;

	public void buscaURL() throws MalformedURLException {
			this.dom  = new Dominio();
	}

	/** TRANSMITIMOS A LOS HTMLS - getMapping DICE A CUALES*/

	@GetMapping({"","/","/home","/inicio","/index"})
	public String welcome(Model model) throws MalformedURLException {
		this.buscaURL();
		model.addAttribute("content_1p",
    """
			¿Cuantas veces tienes ese tipo de días que quieres ver una película pero no sabes cual ver?
				""");
		model.addAttribute("content_2p",
    """
			¿Cuantas veces te has perdido en inmensos catalogos?
				""");
		model.addAttribute("content_3p",
    """
			Este es tu sitio ideal.
				""");
		model.addAttribute("title", "La Filmoteca - Inicio");
		model.addAttribute("url", dom.getUrl());
		return "index";
	}

	@GetMapping({"/sobre_nosotros"})
	public String sobre(Model model) throws MalformedURLException {
		this.buscaURL();
		model.addAttribute("content_1p", """
			En La Filmoteca acercamos de una manera intuitiva las mejores películas de la historia según nuestros expertos y
			las más prestigiosas publicaciones de este arte.
			Prometemos acercarnos al visitante de una manera intuitiva y educadora.
				""");
		model.addAttribute("content_2p", """
			Nos comprometemos a que nuestros visitantes puedan escoger cualquier apartado del forma más simple,
			sin colmar su paciencia haciendo que estos mismo recomienden dicha página a sus amigos.
			Con una estética simple y minimalista, haremos que cada visitante confíe en nosotros.
				""");
		model.addAttribute("content_3p", """
			Alejandro Javier Albus -- cc 2022
   
			Aviso legal:
			Todas las imágenes de las películas son propiedad de sus respectivas productoras y/o autores.
			Las descripciones y atributos de las películas han sido extraídas de la web de FilmAffinity
				""");
		model.addAttribute("title", "La Filmoteca - Sobre");
		model.addAttribute("url", dom.getUrl());
		return "sections/sobre_nosotros";
	}

	@GetMapping({"/nuestra_seleccion"})
	public String nuestraSeleccion(Model model) throws MalformedURLException {
		this.buscaURL();
		model.addAttribute("content","Presentamos la selección completa...");
		model.addAttribute("title", "La Filmoteca - Nuestra Seleccion");
		model.addAttribute("url", dom.getUrl());
		return "sections/nuestra_seleccion";
	}

	@GetMapping({"/escribir_resenya"})
	public String escribeResenya(Model model) throws MalformedURLException {
		this.buscaURL();
		model.addAttribute("content","Presentamos la selección completa...");
		model.addAttribute("title", "La Filmoteca - Escribir reseña");
		model.addAttribute("url", dom.getUrl());
		return "sections/escribir_resenya";
	}

	@GetMapping({"/pelicula_elegida"})
	public String peliculaElegida(Model model) throws MalformedURLException {
		this.buscaURL();
		model.addAttribute("titulo", "1917");
		return "sections/pelicula_elegida";
	}

	/** No es necesario hacer una pagina para cada genero */
	@GetMapping({"/generos"})
	public String generos(Model model) throws MalformedURLException {
		this.buscaURL();
		model.addAttribute("content","Presentamos los géneros disponibles...");
		model.addAttribute("title", "La Filmoteca - Géneros");
		model.addAttribute("url", dom.getUrl());
		return "sections/generos";
	}

	@GetMapping("/hora")
	public String hora(Model model) {
		DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
		model.addAttribute("fechahora",dtf.format(LocalDateTime.now()));
		DateTimeFormatter hora = DateTimeFormatter.ofPattern("HH");
		int ihora = Integer.parseInt(hora.format(LocalDateTime.now()));
		String background="claro";
		if (ihora >= 20 || ihora <= 7 ) {
			background="oscuro";
		}
		model.addAttribute("background",background);
		return "hora";
	}

	@GetMapping("/parametros")
	public String parametros (Model model) throws MalformedURLException {
		this.buscaURL();
		model.addAttribute("titulo", "Propiedades del servidor y URL");
		model.addAttribute("addr",dom.getAddr());
		model.addAttribute("hostnameCanonical",dom.getCanonnical());
		model.addAttribute("hostname",dom.getHostname());
		model.addAttribute("address",dom.getAddr());
		/* importante */
		model.addAttribute("url",dom.getUrl());
		model.addAttribute("port",dom.getPuerto());
		model.addAttribute("host",dom.getHostname());
		model.addAttribute("protocol",dom.getProtocolo());
		model.addAttribute("path",dom.getPath());
		model.addAttribute("query",dom.getQuery());
		model.addAttribute("dominio",dom.getDominio());
		model.addAttribute("tld",dom.getTld());
		return("pruebas/parametros");
	}

	/**
	 * 127.0.0.1 dominio1.es.tipo1
	 * 127.0.0.1 dominio2.es.tipo1
	 * 127.0.0.1 dominio1.es.tipo2
	 * 127.0.0.1 dominio2.es.tipo2
	 */

	/* backend */
	@GetMapping({"/springsecurity/{usuario}","/springsecurity"})
	public String springsecurity(@PathVariable(name="usuario", required = false) String usuario, Model model) throws MalformedURLException {
		this.buscaURL();
		model.addAttribute("titulo","Panel de control security");
		model.addAttribute("usuario",usuario);
		return "springsecurity/login";
	}

	/*@GetMapping({"/logout","/salir"})
	public String logout( Model model) throws MalformedURLException {
		this.buscaURL();
		model.addAttribute("titulo","Panel de control security");
		return "springsecurity/logout";
	}*/

	/*  url amigable */
	@GetMapping({"/entrar/{usuario}","/entrar","/usuario/{usuario}","/usuario"})
	public String login(@PathVariable(name="usuario", required = false) String usuario,
						Model model) throws MalformedURLException {
		this.buscaURL();
		model.addAttribute("titulo","Panel de control");
		model.addAttribute("usuario",usuario);
		return "backend/login";
	}

	/* admin */
	@GetMapping({"/admin","/intranet","/login"})
	public String admin(@RequestParam("usuario") Optional<String>  usuario,
						Model model) throws MalformedURLException {
		this.buscaURL();
		model.addAttribute("titulo","Intranet");
		model.addAttribute("usuario",usuario.orElse(""));
		return "admin/login";
	}

}
