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.Planta;
import com.ejie.t17i.model.Portal;
import com.ejie.t17i.service.PlantaService;

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

@Controller
@RequestMapping(value = "/plantas")
public class PlantasController {

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

	@Autowired
	private PlantaService plantaService;


	/**
	 * Operacion CRUD Read. Devuelve el bean correspondiente al identificador
	 * indicado.
	 * 
	 * @param idPlanta
	 *            BigDecimal
	 * @return Planta Objeto correspondiente al identificador indicado.
	 */
	@RequestMapping(value = "/{idPlanta}", method = RequestMethod.GET)
	public @ResponseBody
	Planta get(@PathVariable BigDecimal idPlanta) {
		Planta planta = new Planta(idPlanta);
		planta = this.plantaService.find(planta);
		PlantasController.LOGGER
				.info("[GET - findBy_PK] : Obtener Planta por PK");
		return planta;
	}
//	/**
//	 * Devuelve una lista de beans correspondientes a los valores de filtrados
//	 * indicados en el objeto pasado como parametro.
//	 * 
//	 * @param idCalle 
//	 * @param entity
//	 * @param request
//	 * @return List<Planta> Lista de objetos correspondientes a la busqueda
//	 *         realizada.
//	 */
//	@RequestMapping(method = RequestMethod.GET)
//	public @ResponseBody
//	List<Planta> getAll(
//			@RequestParam(value = "idPortal", required = false) final String idPortal,
//			@RequestParam(value = "q", required = false)final  String descripcion,
//			@RequestParam(value = "escalera", required = false) final String escalera,
//			@RequestParam(value = "entity", required = false) final String entity,
//			final HttpServletRequest request) {
//		PlantasController.LOGGER
//				.info("[GET - find_ALL] : Obtener Calles por filtro");
//String idPortalEntity=null;
//		
//		if(idPortal==null || "".equals(idPortal)){
//			if(!(request.getParameter(entity+"portal.id")==null || "".equals(request.getParameter(entity+"portal.id")))){
//				idPortalEntity = request.getParameter(entity+"portal.id");
//			}
//			
//		}
//		else{
//			idPortalEntity=idPortal;
//		}
//		if(idPortalEntity==null || "".equals(idPortalEntity)){
//			return null;
//		} 
//		final Portal portalAux = new Portal(BigDecimal.valueOf(Long.valueOf(idPortalEntity)));
//		final Planta filterPlanta = new Planta();
//		filterPlanta.setPortal(portalAux);	
//		filterPlanta.setEscalera(escalera);
//		return this.plantaService.findAll(filterPlanta, null);
//	}
//	/**
//	 * Devuelve una lista de beans correspondientes a los valores de filtrados
//	 * indicados en el objeto pasado como parametro.
//	 * 
//	 * @param idCalle 
//	 * @param entity
//	 * @param request
//	 * @return List<Planta> Lista de objetos correspondientes a la busqueda
//	 *         realizada.
//	 */
//	@RequestMapping(value = "/count", method = RequestMethod.GET)
//	Long getAllCount(
//			@RequestParam(value = "idPortal", required = false) final String idPortal,
//			@RequestParam(value = "q", required = false)final  String descripcion,
//			@RequestParam(value = "escalera", required = false) final String escalera,
//			@RequestParam(value = "entity", required = false) final String entity,
//			final HttpServletRequest request) {
//		PlantasController.LOGGER
//				.info("[GET - find_ALL] : Obtener Calles por filtro");
//String idPortalEntity=null;
//		
//		if(idPortal==null || "".equals(idPortal)){
//			if(!(request.getParameter(entity+"portal.id")==null || "".equals(request.getParameter(entity+"portal.id")))){
//				idPortalEntity = request.getParameter(entity+"portal.id");
//			}
//			
//		}
//		else{
//			idPortalEntity=idPortal;
//		}
//		if(idPortalEntity==null || "".equals(idPortalEntity)){
//			return null;
//		} 
//		final Portal portalAux = new Portal(BigDecimal.valueOf(Long.valueOf(idPortalEntity)));
//		final Planta filterPlanta = new Planta();
//		filterPlanta.setPortal(portalAux);	
//		filterPlanta.setEscalera(escalera);
//		return this.plantaService.findAllCount(filterPlanta);
//	}
	/**
	 * Devuelve una lista de beans correspondientes a los valores de filtrados
	 * indicados en el objeto pasado como parametro.
	 * 
	 * @param idPortal  Portal
	 * @param request request
	 * @return List<Planta> Lista de objetos correspondientes a la busqueda
	 *         realizada.
	 */
	@RequestMapping(value = "/countEscalera/{idPortal}", method = RequestMethod.GET)
	@ResponseBody
	Long getAllCountEscalera(
			@PathVariable BigDecimal idPortal,
			final HttpServletRequest request) {
		PlantasController.LOGGER
				.info("[GET - find_ALL] : Obtener Calles por filtro");
		final Portal portalAux = new Portal(idPortal);
		final Planta filterPlanta = new Planta();
		filterPlanta.setPortal(portalAux);	
		return this.plantaService.findAllCountEscalera(filterPlanta);
	}
	/**
	 * Devuelve una lista de beans correspondientes a los valores de filtrados
	 * indicados en el objeto pasado como parametro.
	 * 
	 * @param idPortal Portal 
	 * @param escalera escalera
	 * @param request request
	 * @return List<Planta> Lista de objetos correspondientes a la busqueda
	 *         realizada.
	 */
	@RequestMapping(value = "/countPiso", method = RequestMethod.GET)
	@ResponseBody
	Long getAllCountPiso(
			@RequestParam(value = "idPortal", required = true) final String idPortal,
			@RequestParam(value = "escalera", required = false) final String escalera,
			final HttpServletRequest request) {
		PlantasController.LOGGER
				.info("[GET - find_ALL] : Obtener Calles por filtro");
		
		final Portal portalAux = new Portal(BigDecimal.valueOf(Long.valueOf(idPortal)));
		final Planta filterPlanta = new Planta();
		filterPlanta.setPortal(portalAux);	
		filterPlanta.setEscalera(escalera);
		return this.plantaService.findAllCountPiso(filterPlanta);
	}
	
	/**
	 * Devuelve una lista de beans correspondientes a los valores de filtrados
	 * indicados en el objeto pasado como parametro.
	 * 
	 * @param idPortal Portal
	 * @param entity Entidad
	 * @param descripcion Descripcion
	 * @param request request
	 * @return List<Calle> Lista de objetos correspondientes a la busqueda
	 *         realizada.
	 */
	
	@RequestMapping(value = "/autocomplete/escalera", method = RequestMethod.GET)
	public @ResponseBody
	List<Planta> getAllLikeEscalera(
			@RequestParam(value = "idPortal", required = false) final String idPortal,
			@RequestParam(value = "q", required = false)final  String descripcion,
			@RequestParam(value = "entity", required = false) final String entity,
			final HttpServletRequest request) {
		PlantasController.LOGGER
				.info("[GET - find_ALL] : Obtener Calles por filtro");
String idPortalEntity=null;
		
		if(idPortal==null || "".equals(idPortal)){
			if(!(request.getParameter(entity+"portal.id")==null || "".equals(request.getParameter(entity+"portal.id")))){
				idPortalEntity = request.getParameter(entity+"portal.id");
			}
			
		}
		else{
			idPortalEntity=idPortal;
		}
		if(idPortalEntity==null || "".equals(idPortalEntity)){
			return null;
		} 
		final Portal portalAux = new Portal(BigDecimal.valueOf(Long.valueOf(idPortalEntity)));
		final Planta filterPlanta = new Planta();
		filterPlanta.setPortal(portalAux);	
		filterPlanta.setEscalera(descripcion);
		return this.plantaService.findAllLikeEscalera(filterPlanta, null,false);
	}
	
	/**
	 * Devuelve una lista de beans correspondientes a los valores de filtrados
	 * indicados en el objeto pasado como parametro.
	 * 
	 * @param idPortal Portal
	 * @param entity Entidad
	 * @param escalera escalera
	 * @param descripcion Descripcion
	 * @param request request
	 * @return List<Calle> Lista de objetos correspondientes a la busqueda
	 *         realizada.
	 */
	
	@RequestMapping(value = "/autocomplete/piso", method = RequestMethod.GET)
	public @ResponseBody
	List<Planta> getAllLike(
			@RequestParam(value = "idPortal", required = false) final String idPortal,
			@RequestParam(value = "q", required = false)final  String descripcion,
			@RequestParam(value = "escalera", required = false) final String escalera,
			@RequestParam(value = "entity", required = false) final String entity,
			final HttpServletRequest request) {
		PlantasController.LOGGER
				.info("[GET - find_ALL] : Obtener Calles por filtro");
String idPortalEntity=null;
		
		if(idPortal==null || "".equals(idPortal)){
			if(!(request.getParameter(entity+"portal.id")==null || "".equals(request.getParameter(entity+"portal.id")))){
				idPortalEntity = request.getParameter(entity+"portal.id");
			}
			
		}
		else{
			idPortalEntity=idPortal;
		}
		if(idPortalEntity==null || "".equals(idPortalEntity)){
			return null;
		} 
		final Portal portalAux = new Portal(BigDecimal.valueOf(Long.valueOf(idPortalEntity)));
		final Planta filterPlanta = new Planta();
		filterPlanta.setPortal(portalAux);	
		filterPlanta.setEscalera(escalera);
		filterPlanta.setPiso(descripcion);
		return this.plantaService.findAllLike(filterPlanta, null,false);
	}
}
