package com.ejie.t17i.control;

import java.math.BigDecimal;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.ejie.t17i.model.Localidad;
import com.ejie.t17i.model.Municipio;
import com.ejie.t17i.model.Provincia;
import com.ejie.t17i.service.LocalidadService;

/**
 * * LocalidadesController generated, 21-may-2012 13:24:29.
 * 
XXXX
 */

@Controller
@RequestMapping(value = "/localidades")
public class LocalidadesController {

	private static final Logger LOGGER = LoggerFactory
			.getLogger(LocalidadesController.class);

	@Autowired
	private LocalidadService localidadService;

	/**
	 * Operacion CRUD Read. Devuelve el bean correspondiente al identificador
	 * indicado.
	 * 
	 * @param idLocalidad
	 *            BigDecimal
	 * @return Localidad Objeto correspondiente al identificador indicado.
	 */
	@RequestMapping(value = "/{idLocalidad}", method = RequestMethod.GET)
	public @ResponseBody
	Localidad get(@PathVariable BigDecimal idLocalidad) {
		Localidad localidad = new Localidad(idLocalidad);
		localidad = this.localidadService.find(localidad);
		LocalidadesController.LOGGER
				.info("[GET - findBy_PK] : Obtener Localidad por PK");
		return localidad;
	}

	/**
	 * Devuelve una lista de beans correspondientes a los valores de filtrados
	 * indicados en el objeto pasado como parametro.
	 * 
	 * @param idLocalidad
	 *            BigDecimal
	 * @param idProvincia
	 *            String
	 * @param idMunicipio
	 *            String
	 * @param descripcion
	 *            String
	 * @param entity
	 *            String
	 * @param request
	 *            HttpServletRequest
	 * @return List<Localidad> Lista de objetos correspondientes a la busqueda
	 *         realizada.
	 */

	@RequestMapping(method = RequestMethod.GET)
	public @ResponseBody
	List<Localidad> getAll(
			@RequestParam(value = "idLocalidad", required = false) BigDecimal idLocalidad,
			@RequestParam(value = "idProvincia", required = false) String idProvincia,
			@RequestParam(value = "idMunicipio", required = false) String idMunicipio,
			@RequestParam(value = "descripcion", required = false) String descripcion,
			@RequestParam(value = "entity", required = false) String entity,
			HttpServletRequest request) {
		LocalidadesController.LOGGER
				.info("[GET - find_ALL] : Obtener Localidades por filtro");
		String provinciaIdEntity = request
				.getParameter(entity + "provincia.id");
		String municipioIdEntity = request
				.getParameter(entity + "municipio.id");

		if (idProvincia == null || "".equals(idProvincia)) {
			if (provinciaIdEntity == null || "".equals(provinciaIdEntity)) {
				return null;
			}
		} else {
			provinciaIdEntity = idProvincia;
		}
		if (idMunicipio == null || "".equals(idMunicipio)) {
			if (municipioIdEntity == null || "".equals(municipioIdEntity)) {
				return null;
			}
		} else {
			municipioIdEntity = idMunicipio;
		}
		final Provincia prov = new Provincia(provinciaIdEntity);
		final Municipio munAux = new Municipio(municipioIdEntity, prov);
		Localidad filterLocalidad = new Localidad(idLocalidad);
		filterLocalidad.setMunicipio(munAux);
		filterLocalidad.setNombre(descripcion);
		return this.localidadService.findAll(filterLocalidad, null);
	}

}
