package com.mx.dla.dda.contrato.terminos.actions;

import java.io.IOException;
import java.text.ParseException;

import org.apache.ibatis.exceptions.PersistenceException;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;

import com.mx.dla.dda.contrato.common.actions.BaseContratoAction;
import com.mx.dla.dda.contrato.common.constants.ContratoConstats;
import com.mx.dla.dda.contrato.terminos.bos.TerminosBO;
import com.mx.dla.dda.contrato.terminos.dtos.ContratoConsultaDTO;
import com.mx.dla.dda.contrato.terminos.dtos.TerminoDTO;
import com.opensymphony.xwork2.Action;

public class ContratoTerminosAction extends BaseContratoAction {

	private static final long serialVersionUID = 1L;

	@Autowired
	private TerminosBO terminosBO;

	private TerminoDTO termino;
	private ContratoConsultaDTO contrato;
	private String mensaje;

	public String index() {
		return Action.SUCCESS;
	}

	public String obtenerTermino() {

		try {
			Long idC = (Long) getSession().get(ContratoConstats.ID_CONTRATO_SESSION);
			termino = terminosBO.getTerminos(idC);
			contrato = terminosBO.getInformacionContrato(idC, termino);
		} catch (PersistenceException ibe) {
			this.mensaje = "Ocurrió un error al obtener los datos.";
			logger.error("Error en [" + this.getClass() + "]", ibe);

		}
		return "regresar";
	}

	public String guardarTermino() {
		try {
			Long idC = (Long) getSession().get(ContratoConstats.ID_CONTRATO_SESSION);

			ObjectMapper mapper = new ObjectMapper();
			termino = mapper.readValue(mensaje, TerminoDTO.class);
			terminosBO.guardarTerminos(termino, idC);

			termino = terminosBO.getTerminos(idC);
			contrato = terminosBO.getInformacionContrato(idC, termino);
			this.mensaje = null;
		} catch (PersistenceException ibe) {
			this.mensaje = "Ocurrió un error al guardar los datos.";
			logger.error("Error en [" + this.getClass() + "]", ibe);

		} catch (ParseException e) {
			this.mensaje = "Ocurrió un error al guardar los datos.";
			logger.error("Error en [" + this.getClass() + "]", e);
		} catch (IOException e) {
			this.mensaje = "Ocurrió un error al guardar los datos.";
			logger.error("Error en [" + this.getClass() + "]", e);
		}
		return "regresar";
	}

	public TerminoDTO getTermino() {
		return termino;
	}

	public void setTermino(TerminoDTO termino) {
		this.termino = termino;
	}

	public ContratoConsultaDTO getContrato() {
		return contrato;
	}

	public void setContrato(ContratoConsultaDTO contrato) {
		this.contrato = contrato;
	}

	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}
}
