package com.ejie.ab61.control.terceros;

import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
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.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;

import com.ejie.ab61.comun.Constantes;
import com.ejie.ab61.model.expedientes.RelExpTer;
import com.ejie.ab61.model.terceros.DatosTerceros;
import com.ejie.ab61.model.terceros.Participantes;
import com.ejie.ab61.model.terceros.TiposTercero;
import com.ejie.ab61.model.usuario.Usuario;
import com.ejie.ab61.service.terceros.DatosTercerosService;

/**
 *  
 */

@Controller
@RequestMapping(value = "/solicitantes")
@SessionAttributes("usuario")
public class SolicitantesController {

	private static final Logger logger = LoggerFactory.getLogger(SolicitantesController.class);
	@Autowired
	private DatosTercerosService datosTercerosService;

	/**
	 * Method 'initTerceros'
	 * 
	 * @param model
	 *            Model
	 * @param request
	 *            request
	 * 
	 * @return ModelAndView
	 */
	@RequestMapping(value = "/add/{tipo}/{idExpediente}", method = RequestMethod.GET)
	public ModelAndView initTerceros(@PathVariable String tipo, @PathVariable String idExpediente, Model model) {
		SolicitantesController.logger.info("[GET - addSolicitante] : ver pagina anyadir solicitantes");
		String view = "";
		model.addAttribute("idExpediente", idExpediente);
		Long idTipoTercero = null;
		if ("REPRESENTANTELEGAL".equalsIgnoreCase(tipo)) {
			idTipoTercero = Constantes.TiposTercero.REPRESENTANTE_LEGAL;
			view = "addRepresentanteLegal";
		} else if ("PERSONASCONTACTO".equalsIgnoreCase(tipo)) {
			idTipoTercero = Constantes.TiposTercero.PERSONA_CONTACTO;
			view = "addPersonaContacto";
		}
		model.addAttribute("idTipoTercero", idTipoTercero);
		return new ModelAndView(view);
	}

	/**
	 * Operacion CRUD Create. Creacion de un nuevo registro a partir del bean
	 * indicado.
	 *
	 * @param participantes
	 *            Participantes Bean que contiene la informacion con la que se
	 *            va a crear el nuevo registro.
	 * @return Participantes Bean resultante del proceso de creacion.
	 */
	@RequestMapping(method = RequestMethod.POST)
	public @ResponseBody Participantes add(@RequestBody Participantes participantes, Usuario usuario) {

		Date fecha = new Date();
		RelExpTer relExpTer = new RelExpTer();
		TiposTercero tiposTercero = new TiposTercero();
		tiposTercero.setIdTipoTercero(participantes.getIdTipoTercero());
		relExpTer.setTiposTercero(tiposTercero);
		relExpTer.setIdExpediente(participantes.getIdExpediente());
		relExpTer.setFechaRegistro(fecha);

		if (usuario != null && usuario.getNombreUsuario() != null) {
			relExpTer.setUsuarioRegistro(usuario.getNombreUsuario());
		} else {
			relExpTer.setUsuarioRegistro(Constantes.AB61);
		}

		SolicitantesController.logger.info("[POST] : insertando Tercero en controller  ");

		DatosTerceros datosTerceros = new DatosTerceros();
		if (null != participantes.getIdTipoDocumento()) {
			datosTerceros.setIdTipoDocumento(participantes.getIdTipoDocumento());
		}
		if (null != participantes.getNumero()) {
			datosTerceros.setDocumento(participantes.getNumero());
		}
		if (null != participantes.getEmail()) {
			datosTerceros.setEmail(participantes.getEmail());
		}
		if (null != participantes.getTelefono()) {
			datosTerceros.setTelefono(participantes.getTelefono());
		}
		datosTerceros.setNombre(participantes.getNombre());
		datosTerceros.setApellido1(participantes.getApellido1());
		datosTerceros.setApellido2(participantes.getApellido2());
		datosTerceros.setIdSexo(participantes.getIdSexo());

		if (usuario != null && usuario.getNombreUsuario() != null) {
			datosTerceros.setUsuarioRegistro(usuario.getNombreUsuario());
		} else {
			datosTerceros.setUsuarioRegistro(Constantes.AB61);
		}

		SolicitantesController.logger.info("[POST] : tercero antes de add  " + datosTerceros.getDocumento());
		this.datosTercerosService.addTerceroConRelacion(datosTerceros, relExpTer);

		SolicitantesController.logger.info("[POST] : Participantes insertado correctamente");
		return null;
	}
}
