/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ctecinf.nfe;

import br.inf.portalfiscal.nfe.v400.autorizacao.TNFe;


/**
 *
 * @author Cássio Conceição
 * @since 19/09/2018
 * @version 201809
 * @see http://ctecinf.com.br
 */
public class Cartao {

    public static final Cartao[] CARTOES = {Cartao.visaInstance(), Cartao.mastercardInstance(), Cartao.banricomprasInstance(), Cartao.hipercardInstance(), Cartao.eloInstance(), Cartao.americaInstance(), Cartao.dinersInstance(), Cartao.verdecardInstance(), Cartao.auraInstance(), Cartao.cabalInstance(), Cartao.sorocredInstance(), Cartao.newInstance()};

    protected String tBand;
    protected String cnpj;
    private String cAut;
    private String descricao;
    private Integer tpIntegra = 2; //1 = TEF no sistema | 2 = Máquina de cartão

    public static Cartao newInstance(TNFe.InfNFe.Pag.DetPag.Card card) {

        for (Cartao c : Cartao.CARTOES) {

            if (card.getTBand().equals("99") && card.getCNPJ().equals("92934215000106")) {
                return Cartao.banricomprasInstance();
            } else if (card.getTBand().equals("99") && card.getCNPJ().equals("01722480000167")) {
                return Cartao.verdecardInstance();
            } else if (card.getTBand().equalsIgnoreCase(c.gettBand())) {
                return c;
            }
        }

        Cartao c = new Cartao();
        c.setCnpj(card.getCNPJ());
        c.setcAut(card.getCAut());
        c.setTpIntegra(Integer.parseInt(card.getTpIntegra()));
        c.settBand(card.getTBand());

        return c;
    }

    public static Cartao newInstance() {

        Cartao c = new Cartao();
        c.setDescricao("Outros");
        c.settBand("99");

        return c;
    }

    public static Cartao americaInstance() {

        Cartao c = new Cartao();
        c.setDescricao("America Express");
        c.settBand("03");
        c.setCnpj("60419645000195");

        return c;
    }

    public static Cartao auraInstance() {

        Cartao c = new Cartao();
        c.setDescricao("Aura");
        c.settBand("08");
        c.setCnpj("03722919000187");

        return c;
    }

    public static Cartao banricomprasInstance() {

        Cartao c = new Cartao();
        c.setDescricao("Banricompras");
        c.settBand("99");
        c.setCnpj("92934215000106");

        return c;
    }

    public static Cartao cabalInstance() {

        Cartao c = new Cartao();
        c.setDescricao("Cabal");
        c.settBand("09");
        c.setCnpj("03766873000106");

        return c;
    }

    public static Cartao dinersInstance() {

        Cartao c = new Cartao();
        c.setDescricao("Diners");
        c.settBand("05");
        c.setCnpj("01425787000104");

        return c;
    }

    public static Cartao eloInstance() {

        Cartao c = new Cartao();
        c.setDescricao("Elo");
        c.settBand("06");
        c.setCnpj("01425787000104");

        return c;
    }

    public static Cartao hipercardInstance() {

        Cartao c = new Cartao();
        c.setDescricao("Hipercard");
        c.settBand("07");
        c.setCnpj("01425787000104");

        return c;
    }

    public static Cartao mastercardInstance() {

        Cartao c = new Cartao();
        c.setDescricao("Mastercard");
        c.settBand("02");
        c.setCnpj("01425787000104");

        return c;
    }

    public static Cartao sorocredInstance() {

        Cartao c = new Cartao();
        c.setDescricao("Sorocred");
        c.settBand("04");
        c.setCnpj("60114865000100");

        return c;
    }

    public static Cartao verdecardInstance() {

        Cartao c = new Cartao();
        c.setDescricao("Verdecard");
        c.settBand("99");
        c.setCnpj("01722480000167");

        return c;
    }

    public static Cartao visaInstance() {

        Cartao c = new Cartao();
        c.setDescricao("Visa");
        c.settBand("01");
        c.setCnpj("01425787000104");

        return c;
    }

    public void settBand(String tBand) {
        this.tBand = tBand;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public void setcAut(String cAut) {
        this.cAut = cAut;
    }

    public void setTpIntegra(Integer tpIntegra) {
        this.tpIntegra = tpIntegra;
    }

    public String getCnpj() {
        return cnpj;
    }

    public String getDescricao() {
        return descricao;
    }

    public String gettBand() {
        return tBand;
    }

    public Integer getTpIntegra() {
        return tpIntegra;
    }

    public String getcAut() {
        return cAut;
    }

    @Override
    public String toString() {
        return descricao;
    }

}
