package bean;

import beans.ClienteFacadeLocal;
import beans.TarjetaDebitoFacadeLocal;
import entities.Cliente;
import entities.CompraTarjetaDebito;
import entities.DepositoCuentaCorriente;
import entities.DepositoTarjetaDebito;
import entities.GiroCuentaCorriente;
import entities.GiroTarjetaDebito;
import entities.TarjetaDebito;
import entities.TransferenciaCuentaCorriente;
import entities.TransferenciaTarjetaDebito;
import java.io.Serializable;
import java.util.Date;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.FacesContext;
import javax.inject.Named;

@Named(value = "tarjetaDebitoBean")
@SessionScoped
public class TarjetaDebitoBean implements Serializable {

  @EJB
  private TarjetaDebitoFacadeLocal tarjetaDebitoFacade;
  @EJB
  private ClienteFacadeLocal clienteFacade;

  private Cliente cliente;
  private TarjetaDebito tarjetaDebito;

  @PostConstruct
  public void init() {
    this.cliente = new Cliente();
    this.tarjetaDebito = new TarjetaDebito();
  }

  public String contratar() {
    tarjetaDebito.setCliente(cliente);

    tarjetaDebitoFacade.create(tarjetaDebito);
    clienteFacade.edit(cliente);

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

  public String gotoDepositar() {
    FacesContext context = FacesContext.getCurrentInstance();
    DepositoBean db = context.getApplication().evaluateExpressionGet(context, "#{depositoBean}", DepositoBean.class);
    db.setTarjetaDebito(tarjetaDebito);
    return "cliente_tarjeta_debito_depositar";
  }

  public String gotoDeleteDeposito(DepositoTarjetaDebito deposito) {
    FacesContext context = FacesContext.getCurrentInstance();
    DepositoBean db = context.getApplication().evaluateExpressionGet(context, "#{depositoBean}", DepositoBean.class);
    db.setTarjetaDebito(tarjetaDebito);
    db.setDepositoTarjetaDebito(deposito);
    return "admin_tarjeta_debito_delete_deposito";
  }

  public String gotoGirar() {
    FacesContext context = FacesContext.getCurrentInstance();
    GiroBean gb = context.getApplication().evaluateExpressionGet(context, "#{giroBean}", GiroBean.class);
    gb.setTarjetaDebito(tarjetaDebito);
    return "cliente_tarjeta_debito_girar";
  }

  public String gotoDeleteGiro(GiroTarjetaDebito giro) {
    FacesContext context = FacesContext.getCurrentInstance();
    GiroBean gb = context.getApplication().evaluateExpressionGet(context, "#{giroBean}", GiroBean.class);
    gb.setTarjetaDebito(tarjetaDebito);
    gb.setGiroTarjetaDebito(giro);
    return "admin_tarjeta_debito_delete_giro";
  }

  public String gotoTransferir() {
    FacesContext context = FacesContext.getCurrentInstance();
    TransferenciaBean tb = context.getApplication().evaluateExpressionGet(context, "#{transferenciaBean}", TransferenciaBean.class);
    tb.setTarjetaDebito(tarjetaDebito);
    return "cliente_tarjeta_debito_transferir";
  }

  public String gotoDeleteTransferencia(TransferenciaTarjetaDebito transferencia) {
    FacesContext context = FacesContext.getCurrentInstance();
    TransferenciaBean tb = context.getApplication().evaluateExpressionGet(context, "#{transferenciaBean}", TransferenciaBean.class);
    tb.setTarjetaDebito(tarjetaDebito);
    tb.setTransferenciaTarjetaDebito(transferencia);
    return "admin_tarjeta_debito_delete_transferencia";
  }

  public String gotoComprar() {
    FacesContext context = FacesContext.getCurrentInstance();
    CompraBean cb = context.getApplication().evaluateExpressionGet(context, "#{compraBean}", CompraBean.class);
    cb.setTarjetaDebito(tarjetaDebito);
    return "cliente_tarjeta_debito_comprar";
  }

  public String gotoDeleteCompra(CompraTarjetaDebito compra) {
    FacesContext context = FacesContext.getCurrentInstance();
    CompraBean cb = context.getApplication().evaluateExpressionGet(context, "#{compraBean}", CompraBean.class);
    cb.setTarjetaDebito(tarjetaDebito);
    cb.setCompraTarjetaDebito(compra);
    return "admin_tarjeta_debito_delete_compra";
  }

  private void resetInput() {
    this.cliente = new Cliente();
    this.tarjetaDebito = new TarjetaDebito();
  }

  public Cliente getCliente() {
    return cliente;
  }

  public void setCliente(Cliente cliente) {
    this.cliente = cliente;
  }

  public TarjetaDebito getTarjetaDebito() {
    return tarjetaDebito;
  }

  public void setTarjetaDebito(TarjetaDebito tarjetaDebito) {
    this.tarjetaDebito = tarjetaDebito;
  }

}
