package com.ejie.ab79.control.fichaInspeccion;

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.ui.Model;
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.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.ejie.ab79.comun.UtilsConfig;
import com.ejie.ab79.model.RelEstIns;
import com.ejie.ab79.model.expedientes.Expedientes;
import com.ejie.ab79.model.inspecciones.CampainasInspeccion;
import com.ejie.ab79.model.inspecciones.Inspecciones;
import com.ejie.ab79.model.inspecciones.RelExpIns;
import com.ejie.ab79.model.propuestaSancion.PropuestaSancion;
import com.ejie.ab79.service.RelEstInsService;
import com.ejie.ab79.service.expedientes.ExpedientesService;
import com.ejie.ab79.service.inspecciones.CampainasInspeccionService;
import com.ejie.ab79.service.inspecciones.InspeccionesService;
import com.ejie.ab79.service.inspecciones.fichaDeInspeccionService;
import com.ejie.ab79.service.propuestaSancion.PropuestaSancionService;

/**
 * CampainasInspeccionController  
 * 
 *  
 */
@SessionAttributes("usuario")
@Controller
@RequestMapping(value = "/fichadeinspeccion")

public class fichaDeInspeccionController {

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

	@Autowired
	private ExpedientesService expedientesService;

	@Autowired
	private InspeccionesService inspeccionesService;

	@Autowired
	private CampainasInspeccionService campainasInspeccionService;

	@Autowired
	private RelEstInsService relEstInsService;

	@Autowired
	private fichaDeInspeccionService fichaDeInspeccionService;

	@Autowired
	private PropuestaSancionService propuestaSancionService;

	/**
	 * Metodo de presentacion de las Tabs.
	 * 
	 * @param model
	 *            Model
	 * @return String
	 */
	@RequestMapping(value = "/maint/{idInspeccion}", method = RequestMethod.GET)
	public String getFormEdit(HttpServletRequest httpRequest, Model model, @PathVariable Integer idInspeccion) {
		fichaDeInspeccionController.logger.info("[GET - View] : Tabs de datos basicos de inspeccion");

		Inspecciones inspecciones = new Inspecciones();
		inspecciones.setIdInspeccion(idInspeccion);
		inspecciones = this.inspeccionesService.find(inspecciones);

		return this.fichaDeInspeccionService.fichaInspeccionView(httpRequest, inspecciones, model);
	}

	/**
	 * Cargamos la ficha expediente desde de otra aplicacion
	 * 
	 * @param model
	 *            Model
	 * @return String
	 * @throws Exception
	 */
	@RequestMapping(value = "/cargarCabecera/{idInspeccion}", method = RequestMethod.GET)
	public @ResponseBody Expedientes getDatos(@PathVariable Integer idInspeccion) throws Exception {
		fichaDeInspeccionController.logger.info("[GET - View] : datso de expediente para volcar en cabecera");
		// buscar el folderId del expediente
		Expedientes expedientes = new Expedientes();
		RelExpIns relExpIns = new RelExpIns();
		Inspecciones inspecciones = new Inspecciones();
		inspecciones.setIdInspeccion(idInspeccion);
		relExpIns.setInspecciones(inspecciones);
		expedientes.setRelExpIns(relExpIns);
		Expedientes expedientesAux = this.expedientesService.findByIdExpediente(expedientes);
		return expedientesAux;
	}

	/**
	 * Cargamos la ficha expediente desde de otra aplicacion
	 * 
	 * @param model
	 *            Model
	 * @return String
	 * @throws Exception
	 */
	@RequestMapping(value = "/cargarDatosExpediente/{idInspeccion}", method = RequestMethod.GET)
	public @ResponseBody Expedientes cargarDatosExpediente(@PathVariable Integer idInspeccion) throws Exception {
		fichaDeInspeccionController.logger.info("[GET - View] : datos de expediente para volcar en cabecera");
		// buscar el folderId del expediente
		Expedientes expedientes = new Expedientes();
		Inspecciones inspecciones = new Inspecciones();
		inspecciones.setIdInspeccion(idInspeccion);
		inspecciones = this.inspeccionesService.find(inspecciones);
		expedientes.setInspeccion(inspecciones);
		Expedientes expedientesAux = this.expedientesService.findByIdInspeccion(expedientes);

		if (expedientesAux != null && expedientesAux.getIdExpedienteOrigen() != null) {
			Expedientes expedientesOrigen = new Expedientes();
			expedientesOrigen.setIdExpediente(expedientesAux.getIdExpedienteOrigen());
			Expedientes expedientesOrigenAux = this.expedientesService.findByIdExpedienteOrigen(expedientesOrigen);
			expedientesAux.setExpedienteOrigen(expedientesOrigenAux);
			expedientesAux.setInspeccion(inspecciones);
			expedientesAux.setUrlAB63(UtilsConfig.getAppProperties().getProperty("URLAB63"));
		}

		if (expedientesAux != null) {

			PropuestaSancion propuestaSancion = new PropuestaSancion();
			propuestaSancion.setIdInspeccion(inspecciones.getIdInspeccion());
			List<PropuestaSancion> listaPropuestas = this.propuestaSancionService.findAll(propuestaSancion);
			propuestaSancion = (listaPropuestas != null && !listaPropuestas.isEmpty() ? listaPropuestas.get(0) : null);

			if (propuestaSancion != null) {
				if (expedientesAux.getInspeccion() != null) {
					expedientesAux.getInspeccion().setPropuestaSancion(propuestaSancion);
				} else {
					expedientesAux.setInspeccion(new Inspecciones(idInspeccion));
					expedientesAux.getInspeccion().setPropuestaSancion(propuestaSancion);
				}
			}
		}
		return expedientesAux;
	}

	@RequestMapping(value = "/cargarDatosRelEstIns/{idInspeccion}", method = RequestMethod.GET)
	public @ResponseBody RelEstIns cargarDatosrelEstIns(@PathVariable Integer idInspeccion) {
		Inspecciones inspeccion = new Inspecciones();
		inspeccion.setIdInspeccion(idInspeccion);
		inspeccion = this.inspeccionesService.find(inspeccion);

		CampainasInspeccion campaina = new CampainasInspeccion();
		campaina.setIdCampaina(inspeccion.getCampaina().getIdCampaina());
		campaina = this.campainasInspeccionService.find(campaina);

		RelEstIns relEstIns = this.relEstInsService.findByInspeccion(inspeccion);
		inspeccion.setCampaina(campaina);
		relEstIns.setInspeccion(inspeccion);

		PropuestaSancion propuestaSancion = new PropuestaSancion();
		propuestaSancion.setIdInspeccion(inspeccion.getIdInspeccion());
		List<PropuestaSancion> listaPropuestas = this.propuestaSancionService.findAll(propuestaSancion);
		propuestaSancion = (listaPropuestas != null && !listaPropuestas.isEmpty() ? listaPropuestas.get(0) : null);
		relEstIns.getInspeccion().setPropuestaSancion(propuestaSancion);

		relEstIns.setUrlAB63(UtilsConfig.getAppProperties().getProperty("URLAB63"));

		return relEstIns;

	}
}
