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.Calle;
import com.ejie.t17i.model.Municipio;
import com.ejie.t17i.model.Provincia;
import com.ejie.t17i.service.CalleService;
/**
 * * CallesController generated, 21-may-2012 13:24:29.
 * 
XXXX
 */

@Controller
@RequestMapping(value = "/calles")
public class CallesController {

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

	@Autowired
	private CalleService calleService;

	/**
	 * Operacion CRUD Read. Devuelve el bean correspondiente al identificador
	 * indicado.
	 * 
	 * @param idCalle
	 *            BigDecimal
	 * @return Calle Objeto correspondiente al identificador indicado.
	 */
	@RequestMapping(value = "/{idCalle}", method = RequestMethod.GET)
	public @ResponseBody
	Calle get(@PathVariable BigDecimal idCalle) {
		Calle calle = new Calle(idCalle);
		calle = this.calleService.find(calle);
		CallesController.LOGGER
				.info("[GET - findBy_PK] : Obtener Calle por PK");
		return calle;
	}
	/**
	 * Devuelve una lista de beans correspondientes a los valores de filtrados
	 * indicados en el objeto pasado como parametro.
	 * 
	 * @param idCalle Calle
	 * @param idProvincia Provincia
	 * @param idMunicipio Municipio
	 * @param descripcion descripcion
	 * @param entity entity
	 * @param request request
	 * @return List<Calle> Lista de objetos correspondientes a la busqueda
	 *         realizada.
	 */
	@RequestMapping(method = RequestMethod.GET)
	public @ResponseBody
	List<Calle> getAll(
			@RequestParam(value = "idCalle", required = false) BigDecimal idCalle,
			@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) {
		CallesController.LOGGER
				.info("[GET - find_ALL] : Obtener Calles 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);
		final Calle filterCalle = new Calle(idCalle);
		filterCalle.setMunicipio(munAux);
		filterCalle.setNombreEs(descripcion);
		return this.calleService.findAll(filterCalle, null);
	}
	/**
	 * Devuelve una lista de beans correspondientes a los valores de filtrados
	 * indicados en el objeto pasado como parametro.
	 * 
	 * @param idCalle d
	 * @param idProvincia d
	 * @param idMunicipio d
	 * @param entity d
	 * @param descripcion d
	 * @param request d
	 * @return List<Calle> Lista de objetos correspondientes a la busqueda
	 *         realizada.
	 */
	
	@RequestMapping(value = "/autocomplete", method = RequestMethod.GET)
	public @ResponseBody
	List<Calle> getAllLike(
			@RequestParam(value = "idCalle", required = false) BigDecimal idCalle,
			@RequestParam(value = "idProvincia", required = false) String idProvincia,
			@RequestParam(value = "idMunicipio", required = false) String idMunicipio,
			@RequestParam(value = "q", required = false) String descripcion,
			@RequestParam(value = "entity", required = false) String entity,
			HttpServletRequest request) {
		CallesController.LOGGER
				.info("[GET - find_ALL] : Obtener Calles 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);
		Calle filterCalle = new Calle(idCalle);
		filterCalle.setMunicipio(munAux);
		filterCalle.setNombreEs(descripcion);
		return this.calleService.findAll(filterCalle, null);
	}
}
