package com.ejie.t17i.control;

import java.math.BigDecimal;
import java.util.ArrayList;
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.Portal;
import com.ejie.t17i.service.PortalService;

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

@Controller
@RequestMapping(value = "/portales")
public class PortalesController {

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

	@Autowired
	private PortalService portalService;

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

	/**
	 * Devuelve una lista de beans correspondientes a los valores de filtrados
	 * indicados en el objeto pasado como parametro.
	 * 
	 * @param idCalle
	 *            String
	 * @param entity
	 *            String
	 * @param request
	 *            HttpServletRequest
	 * @return List<Portal> Lista de objetos correspondientes a la busqueda
	 *         realizada.
	 */
	@RequestMapping(method = RequestMethod.GET)
	public @ResponseBody
	List<Portal> getAll(
			@RequestParam(value = "idCalle", required = false) final String idCalle,
			@RequestParam(value = "entity", required = false) final String entity,
			final HttpServletRequest request) {
		PortalesController.LOGGER
				.info("[GET - find_ALL] : Obtener Calles por filtro");
		String idCalleEntity = null;

		if (idCalle == null || "".equals(idCalle)) {
			if (!(request.getParameter(entity + "calle.id") == null || ""
					.equals(request.getParameter(entity + "calle.id")))) {
				idCalleEntity = request.getParameter(entity + "calle.id");
			}
			if (idCalleEntity == null || "".equals(idCalleEntity)) {
				return null;
			}
		} else {
			idCalleEntity = idCalle;
		}
		final Calle calleAux = new Calle(BigDecimal.valueOf(Long
				.valueOf(idCalleEntity)));
		final Portal filterPortal = new Portal();
		filterPortal.setCalle(calleAux);
		return this.portalService.findAll(filterPortal, null);
	}

	/**
	 * Devuelve una lista de beans correspondientes a los valores de filtrados
	 * indicados en el objeto pasado como parametro.
	 * 
	 * @param idCalle
	 *            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<Portal> getAllLike(
			@RequestParam(value = "idCalle", required = false) final String idCalle,
			@RequestParam(value = "q", required = false) final String descripcion,
			@RequestParam(value = "entity", required = false) final String entity,
			final HttpServletRequest request) {
		PortalesController.LOGGER
				.info("[GET - find_ALL] : Obtener Calles por filtro");
		String idCalleEntity = null;
		List<Portal> listaPortales = new ArrayList<Portal>();
		if (idCalle == null || "".equals(idCalle)) {
			if (!(request.getParameter(entity + "calle.id") == null || ""
					.equals(request.getParameter(entity + "calle.id")))) {
				idCalleEntity = request.getParameter(entity + "calle.id");
			}

		} else {
			idCalleEntity = idCalle;
		}
		if (idCalleEntity != null && !("".equals(idCalleEntity))) {
			final Calle calleAux = new Calle(BigDecimal.valueOf(Long
					.valueOf(idCalleEntity)));
			final Portal filterPortal = new Portal();
			filterPortal.setCalle(calleAux);
			// TODO como filtrar el texto del portal? bloque-num-bis
			filterPortal.setComboDesc(descripcion);
			listaPortales = this.portalService.findAllLike(filterPortal, null,
					false);
		}

		return listaPortales;
	}

}
