package com.ejie.t17i.control;

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.filters.ProvinciaFilter;
import com.ejie.t17i.model.Provincia;
import com.ejie.t17i.service.ProvinciaService;
/**
 * * ProvinciasController generated, 29-feb-2012 13:24:29.
 * 
XXXX
 */

@Controller
@RequestMapping(value = "/provincias")
public class ProvinciasController {

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

	@Autowired
	private ProvinciaService provinciaService;
	
	/**
	 * Operacion CRUD Read. Devuelve el bean correspondiente al identificador
	 * indicado.
	 * 
	 * @param idProvincia
	 *            String
	 * @return Provincia Objeto correspondiente al identificador indicado.
	 */
	@RequestMapping(value = "/{idProvincia}", method = RequestMethod.GET)
	public @ResponseBody
	Provincia get(@PathVariable final String idProvincia) {
		Provincia provincia = new Provincia(idProvincia);
		provincia = this.provinciaService.find(provincia);
		ProvinciasController.LOGGER
				.info("[GET - findBy_PK] : Obtener Provincia por PK");
		return provincia;
	}
	/**
	 * Devuelve una lista de beans correspondientes a los valores de filtrados
	 * indicados en el objeto pasado como parametro.
	 * 
	 * @param soloCAPV Si devuelve solo de la CAPV
	 * @param request Request
	 * @return List<Provincia> Lista de objetos correspondientes a la busqueda
	 *         realizada.
	 */
	@RequestMapping(method = RequestMethod.GET)
	public @ResponseBody
	List<Provincia> getAll(
			@RequestParam(value = "soloCAPV", required = false) final Boolean soloCAPV,
			final HttpServletRequest request) {
		ProvinciasController.LOGGER
		.info("[GET - find_ALL] : Obtener Provincias por filtro");
		final ProvinciaFilter filterProvincia = new ProvinciaFilter();
		filterProvincia.setSoloCAPV(soloCAPV!=null? soloCAPV : false);
		return this.provinciaService.findAll(filterProvincia, null);
	}
	/**
	 * Devuelve una lista de beans correspondientes a los valores de filtrados
	 * indicados en el objeto pasado como parametro.
	 * 
	 * @param descripcion Texto introducido
	 * @param soloCAPV Si devuelve solo de la CAPV
	 * @param request Request
	 * @return List<Provincia> Lista de objetos correspondientes a la busqueda
	 *         realizada.
	 */
	
	@RequestMapping(value = "/autocomplete", method = RequestMethod.GET)
	public @ResponseBody
	List<Provincia> getAllLike(
			@RequestParam(value = "q", required = false)final  String descripcion,
			@RequestParam(value = "soloCAPV", required = false) final Boolean soloCAPV,
			final HttpServletRequest request) {
		ProvinciasController.LOGGER
				.info("[GET - find_ALL_Like] : Obtener Provincias por filtro");
		final ProvinciaFilter filterProvincia = new ProvinciaFilter();
		filterProvincia.setNombre(descripcion);
		filterProvincia.setSoloCAPV(soloCAPV!=null? soloCAPV : false);
		return this.provinciaService.findAllLike(filterProvincia, null,false);
	}

}
