package bean;

import beans.PagoTarjetaCreditoFacadeLocal;
import beans.TarjetaCreditoFacadeLocal;
import entities.PagoTarjetaCredito;
import entities.TarjetaCredito;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;

@Named(value = "pagoBean")
@SessionScoped
public class PagoBean implements Serializable {

  @EJB
  private PagoTarjetaCreditoFacadeLocal pagoTarjetaCreditoFacade;
  @EJB
  private TarjetaCreditoFacadeLocal tarjetaCreditoFacade;

  private TarjetaCredito tarjetaCredito;

  private int monto;
  private String comentario;
  private String tipo;

  public String pagar() {
    if (tipo.equals("Nacional")) {
      if (tarjetaCredito.getDeudaNacional() == 0) {
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("No hay ninguna deuda nacional que pagar"));
        context.validationFailed();
        return "cliente_tarjeta_credito_pagar";
      }
      if (tarjetaCredito.getDeudaNacional() - monto < 0) {
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("El pago sobrepasa la deuda"));
        context.validationFailed();
        return "cliente_tarjeta_credito_pagar";
      }
    }

    if (tipo.equals("Internacional")) {
      if (tarjetaCredito.getDeudaInternacional() == 0) {
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("No hay ninguna deuda internacional que pagar"));
        context.validationFailed();
        return "cliente_tarjeta_credito_pagar";
      }
      if (tarjetaCredito.getDeudaInternacional() - monto < 0) {
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("El pago sobrepasa la deuda internacional"));
        context.validationFailed();
        return "cliente_tarjeta_credito_pagar";
      }
    }
    
    PagoTarjetaCredito pago = new PagoTarjetaCredito();
    pago.setComentario(comentario);
    pago.setMonto(monto);
    pago.setTipo(tipo);
    pago.setTarjetaCredito(tarjetaCredito);

    switch(tipo){
      case "Nacional":
        tarjetaCredito.setDeudaNacional(tarjetaCredito.getDeudaNacional() - monto);
        break;
      case "Internacional":
        tarjetaCredito.setDeudaInternacional(tarjetaCredito.getDeudaInternacional()- monto);
        break;
    }

    pagoTarjetaCreditoFacade.create(pago);
    tarjetaCreditoFacade.edit(tarjetaCredito);

    this.resetInput();
    return "cliente_tarjeta_credito_view";
  }

  public void resetInput() {
    this.monto = 0;
    this.comentario = null;
    this.tipo = null;
  }

  public TarjetaCredito getTarjetaCredito() {
    return tarjetaCredito;
  }

  public void setTarjetaCredito(TarjetaCredito tarjetaCredito) {
    this.tarjetaCredito = tarjetaCredito;
  }

  public int getMonto() {
    return monto;
  }

  public void setMonto(int monto) {
    this.monto = monto;
  }

  public String getComentario() {
    return comentario;
  }

  public void setComentario(String comentario) {
    this.comentario = comentario;
  }

  public String getTipo() {
    return tipo;
  }

  public void setTipo(String tipo) {
    this.tipo = tipo;
  }

}
