package com.ejie.ab79.service.propuestaSancion;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.ejie.ab79.dao.propuestaSancion.PropuestaSancionDao;
import com.ejie.ab79.dao.propuestaSancion.PropuestaSancionDerechosDao;
import com.ejie.ab79.dao.propuestaSancion.PropuestaSancionInfraccionesDao;
import com.ejie.ab79.model.propuestaSancion.EstadosProSan;
import com.ejie.ab79.model.propuestaSancion.InfraccionesPropuesta;
import com.ejie.ab79.model.propuestaSancion.PropuestaSancion;

@Service(value = "propuestaSancionService")
public class PropuestaSancionServiceImpl implements PropuestaSancionService {
	@Autowired
	private PropuestaSancionDao propuestaSancionDao;
	@Autowired
	private PropuestaSancionInfraccionesDao propuestaSancionInfraccionesDao;
	@Autowired
	private PropuestaSancionDerechosDao propuestaSancionDerechosDao;

	@Override
	public PropuestaSancion addPropuesta(PropuestaSancion propuestaSancion) {
		return propuestaSancionDao.addPropuesta(propuestaSancion);
	}

	@Override
	public PropuestaSancion find(PropuestaSancion propuestaSancion) {
		return propuestaSancionDao.find(propuestaSancion);
	}

	/**
	 * @param propuestaSancion
	 *            PropuestaSancion
	 * 
	 * @return Boolean
	 * 
	 */
	@Transactional(rollbackFor = Throwable.class)
	@Override
	public void deletePropuesta(PropuestaSancion propuestaSancion) {

		/* Eliminar Derechos */
		InfraccionesPropuesta filterInfracciones = new InfraccionesPropuesta();
		filterInfracciones.setIdPropuestaSancion(propuestaSancion.getIdPropuestaSancion());
		List<InfraccionesPropuesta> listaInfracciones = this.propuestaSancionInfraccionesDao
				.findByPropuesta(filterInfracciones);
		for (InfraccionesPropuesta infracciones : listaInfracciones) {
			this.propuestaSancionDerechosDao.removeByInfraccion(infracciones.getIdInfraccion());
		}

		/* Eliminar Infracciones */
		this.propuestaSancionInfraccionesDao.removeByPropuesta(propuestaSancion.getIdPropuestaSancion());

		/* Eliminar Propuesta */
		this.propuestaSancionDao.deletePropuesta(propuestaSancion);
	}

	@Override
	public List<PropuestaSancion> findAll(PropuestaSancion propuestaSancion) {
		return propuestaSancionDao.findAll(propuestaSancion, null);
	}

	@Override
	public void modificarPropuesta(PropuestaSancion filterPropuesta) {
		this.propuestaSancionDao.updatePropuesta(filterPropuesta);

	}

	/**
	 * Buscar la descripción de una propuesta
	 *
	 * @param idPropuestaRemoto
	 *            Integer
	 * @return String
	 */
	@Transactional(readOnly = true)
	public EstadosProSan findEstadoPropuesta(Integer idPropuestaRemoto) {
		return this.propuestaSancionDao.findDescEstadoPropuesta(idPropuestaRemoto);
	}

	/**
	 * Buscar el estado de la propuesta de una inspección
	 *
	 * @param idInspeccion
	 *            Integer
	 * @return Integer
	 */
	@Override
	public Integer comprobarEstadoPropuesta(Integer idInspeccion) {
		return this.propuestaSancionDao.comprobarEstadoPropuesta(idInspeccion);
	}
}
