package com.ejie.m62fb.control.registroVPP;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

import com.ejie.m62fb.dao.registroVPP.ContratoAlquileradDao;
import com.ejie.m62fb.model.ContratoAlquilerad;
import com.ejie.m62fb.model.InquilinoAd;
import com.ejie.m62fb.service.registroVPP.InquilinoAdService;
import com.ejie.x38.control.bind.annotation.RequestJsonBody;
import com.ejie.x38.dto.JQGridRequestDto;
import com.ejie.x38.dto.JQGridResponseDto;

/**
 * InquilinoAdController generated by UDA, 08-oct-2015 9:02:59.
XXXX
 */
 
@Controller
@RequestMapping (value = "/inquilinoad")

public class InquilinoAdController  {

	private static final Logger logger = LoggerFactory.getLogger(InquilinoAdController.class);

	@Autowired
	private InquilinoAdService inquilinoAdService;
	
	@Autowired
	ContratoAlquileradDao contratoAlquileradDao;
	
	/*
	 * OPERACIONES CRUD (Create, Read, Update, Delete)
	 * 
	 */
	
	/**
	 * Operacion CRUD Read. Devuelve el bean correspondiente al identificador indicado.
	 * 
	 * @param idInquilino Integer
	 * @return InquilinoAd 
	 *            Objeto correspondiente al identificador indicado.
	 */
	@RequestMapping(value = "/{idInquilino}", method = RequestMethod.GET)
	public @ResponseBody InquilinoAd get(@PathVariable Integer idInquilino) {
        InquilinoAd inquilinoAd = new InquilinoAd();
		inquilinoAd.setIdInquilino(idInquilino);
        inquilinoAd = this.inquilinoAdService.find(inquilinoAd);
        InquilinoAdController.logger.info("[GET - findBy_PK] : Obtener InquilinoAd por PK");
        return inquilinoAd;
	}


	/**
	 * Operacion CRUD Edit. Modificacion del bean indicado.
	 *
	 * @param inquilinoAd InquilinoAd 
	 *            Bean que contiene la informacion a modificar.
	 * @return InquilinoAd 
	 *            Bean resultante de la modificacion.
	 */
	@RequestMapping(method = RequestMethod.PUT)
    public @ResponseBody InquilinoAd edit(@RequestBody InquilinoAd inquilinoAd) {		
        InquilinoAd inquilinoAdAux = this.inquilinoAdService.update(inquilinoAd);
		InquilinoAdController.logger.info("[PUT] : InquilinoAd actualizado correctamente");
        return inquilinoAdAux;
    }

	/**
	 * Operacion CRUD Create. Creacion de un nuevo registro a partir del bean
	 * indicado.
	 *
	 * @param inquilinoAd InquilinoAd 
	 *            Bean que contiene la informacion con la que se va a crear el
	 *            nuevo registro.
	 * @return InquilinoAd
	 *            Bean resultante del proceso de creacion.
	 */
	@RequestMapping(method = RequestMethod.POST)
	public @ResponseBody InquilinoAd add(@RequestBody InquilinoAd inquilinoAd) {	
		
		//TODO rrecuperar bien el id, y luega ya borrarestas 2 lineas. Borrar el dao de arriba --> contratoAlquileradDao
		//ContratoAlquilerad contratoPrueba = new ContratoAlquilerad(new Integer(86));
		//inquilinoAd.setContratoAlquilerad(contratoAlquileradDao.find(contratoPrueba));
		
        InquilinoAd inquilinoAdAux = this.inquilinoAdService.add(inquilinoAd);
        InquilinoAdController.logger.info("[POST] : InquilinoAd insertado correctamente");
    	return inquilinoAdAux;
	}

	/**
	 * Operacion CRUD Delete. Borrado del registro correspondiente al
	 * identificador especificado.
	 *
	 * @param idInquilino Integer
	 *            Identificador del objeto que se desea eliminar.
	 * @return InquilinoAd
	 *            Bean eliminado.
	 */
	@RequestMapping(value = "/{idInquilino}", method = RequestMethod.DELETE)
	@ResponseStatus(value = HttpStatus.OK)
    public @ResponseBody InquilinoAd remove(@PathVariable Integer idInquilino) {
        InquilinoAd inquilinoAd = new InquilinoAd();
        inquilinoAd.setIdInquilino(idInquilino);
        this.inquilinoAdService.remove(inquilinoAd);
       	InquilinoAdController.logger.info("[DELETE] : InquilinoAd borrado correctamente");
       	return inquilinoAd;
    }
    
	
	/*
	 * METODOS COMPONENTE RUP_TABLE
	 * 
	 */

	 /**
	 * Metodo de presentacion del RUP_TABLE.
	 * 
	 * @param model Model
	 * @return String
	 */
	@RequestMapping(value = "/maint", method = RequestMethod.GET)
	public String getFormEdit(Model model) {
		InquilinoAdController.logger.info("[GET - View] : inquilinoad");
		return "inquilinoad";
	}
	 
	 /**
	 * Operacion de filtrado del componente RUP_TABLE.
	 * 
	 * @param filterInquilinoAd InquilinoAd
	 *            Bean que contiene los parametros de filtrado a emplear.
	 * @param jqGridRequestDto
	 *            Dto que contiene los parametros de configuracion propios del
	 *            RUP_TABLE a aplicar en el filtrado.
	 * @return JQGridResponseDto<InquilinoAd>
	 *            Dto que contiene el resultado del filtrado realizado por el 
	 *            componente RUP_TABLE.
	 */
	@RequestMapping(value = "/filter", method = RequestMethod.POST)
	public @ResponseBody JQGridResponseDto<InquilinoAd> filter(
			@RequestJsonBody(param="filter") InquilinoAd filterInquilinoAd,
			@RequestJsonBody JQGridRequestDto jqGridRequestDto) {
		InquilinoAdController.logger.info("[POST - filter] : Obtener InquilinoAds");
		return this.inquilinoAdService.filter(filterInquilinoAd, jqGridRequestDto, false);
	}
	
	/**
	 * 	##  Métodos de gestión de eventos AJAX del formulario ## 
	 */
	
	/**
	 * Devuelve si existen contratos de alojamiento dotacional y de Etxelaguntza para el inquilino recibido 
	 * en el contrato que estamos dando de alta
	 * 
	 * @param idPersona
	 *            Integer
	 * @param idContrato
	 *            Integer
	 * @return boolean
	 */
	
	@RequestMapping(value = "/verificarContratoNoDuplicado/{idPersona}/{idContrato}", method = RequestMethod.GET)
	public @ResponseBody
	Boolean verificarContratoNoDuplicado(@PathVariable Integer idPersona, @PathVariable Integer idContrato) {
		
		InquilinoAdController.logger
				.info("[verificarContratoNoDuplicado - findBy_IDPERSONA-IDCONTRATO] : Contar contratos por idInquilino");
		//recibir bien hiddenidpersona y hiddenidcontrato
		return this.inquilinoAdService.existsContract4Inquilino(idPersona, idContrato);
	}
	 
}	
