package com.ejie.ad74a.control;

import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.support.ByteArrayMultipartFileEditor;

import com.ejie.ad74a.model.Ayuntamientos;
import com.ejie.ad74a.model.Usuarios;
import com.ejie.ad74a.model.UsuariosAyuntamiento;
import com.ejie.ad74a.service.AyuntamientosService;
import com.ejie.ad74a.util.comun.UtilLiterales;
import com.ejie.ad74a.util.comun.UtilSeguridad;
import com.ejie.ad74a.util.constantes.Constantes;
import com.ejie.x38.util.DateTimeManager;

/**
 * OngLocalController generated by UDA, 21-may-2019 8:09:49.
 * 
 * @author UDA
 */

@Controller
@RequestMapping(value = "/seleccionAyuntamiento")

public class SeleccionAyuntamientoController {

	private static final Logger logger = LoggerFactory.getLogger(SeleccionAyuntamientoController.class);

	@Autowired
	private AyuntamientosService ayuntamientosService;

	@javax.annotation.Resource
	private ReloadableResourceBundleMessageSource appMessageSource;

	@InitBinder
	protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws ServletException {
		binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
		binder.registerCustomEditor(Date.class,
				new CustomDateEditor(DateTimeManager.getDateTimeFormat(LocaleContextHolder.getLocale()), true));
	}

	@GetMapping(value = "/ayuntamientosUsuarioConectado")
	public @ResponseBody List<Ayuntamientos> findAyuntamientosUsuarioConectado(HttpServletRequest request) {
		Usuarios usuarios = new Usuarios();
		usuarios.setUsuXlnets80(UtilSeguridad.getUsuarioConectado().getUserName());

		UsuariosAyuntamiento usuariosAyuntamiento = new UsuariosAyuntamiento();
		usuariosAyuntamiento.setUsuarios(usuarios);
		return this.ayuntamientosService.findComboByUsuarioConectado(usuariosAyuntamiento);
	}

	/**
	 * Metodo de presentacion del RUP_TABLE.
	 * 
	 * @param model Model
	 * @return String
	 */
	@RequestMapping(value = "/maint", method = RequestMethod.GET)
	public String getFormEdit(Model model) {
		SeleccionAyuntamientoController.logger.info("[GET - View] : seleccionAyuntamiento");
		model.addAttribute("menu", false);
		model.addAttribute("title", UtilLiterales.getLiteralMessage(appMessageSource, "title.seleccionAyuntamiento"));

		return "seleccionAyuntamiento";
	}

	/**
	 * Operacion para seleccionar el ayuntamiento por parte del usuario.
	 *
	 * @param idAyuntamiento31 Long Identificador del objeto que se desea eliminar.
	 * @return String.
	 */

	@PostMapping(value = "/setAyuntamiento/{idAyuntamiento31}")
	public @ResponseBody String setAyuntamiento(HttpServletRequest request, HttpServletResponse response,
			@PathVariable Long idAyuntamiento31) {
		HttpSession sesion = request.getSession();
		sesion.setAttribute(Constantes.VARCONTEXTO_AYUNTAMIENTO_SELECCIONADO, idAyuntamiento31);
		String url = "";

		String currentUrl = request.getContextPath() + request.getServletPath();
		if (!currentUrl.contains(Constantes.URL_SELECCIONAYUNTAMIENTO_CONTROLLER)) {
			sesion.setAttribute(Constantes.VARCONTEXTO_URL_OBJETIVO,
					request.getContextPath() + request.getServletPath());
		}

		if (sesion.getAttribute(Constantes.VARCONTEXTO_URL_OBJETIVO) != null) {
			url = (String) sesion.getAttribute(Constantes.VARCONTEXTO_URL_OBJETIVO);
		}
		return url;

	}

	/**
	 * Operacion para obtener el ayuntamiento actual seleccionado.
	 *
	 * @return String.
	 */

	@GetMapping(value = "/getCurrentAyuntamiento")
	public @ResponseBody Ayuntamientos getAyuntamiento(HttpServletRequest request, HttpServletResponse response) {
		HttpSession sesion = request.getSession();
		Long idAyuntamiento = (long) sesion.getAttribute(Constantes.VARCONTEXTO_AYUNTAMIENTO_SELECCIONADO);

		Ayuntamientos ayuntamiento = new Ayuntamientos(idAyuntamiento);
		return this.ayuntamientosService.find(ayuntamiento);

	}

}
