# -*- coding: utf-8 -*-

# noinspection SpellCheckingInspection
class CfeTender(object):
    def __init__(
        self,               # type: CfeTender
        layout_version,     # type: str
    ):
        # type: (...) -> None

        self.layout_version = layout_version

        self.tpag_by_version = {
            "0.07": {
                CfeTenderType.dinheiro,
                CfeTenderType.cheque,
                CfeTenderType.cartao_credito,
                CfeTenderType.cartao_debito,
                CfeTenderType.credito_loja,
                CfeTenderType.vale_alimentacao,
                CfeTenderType.vale_refeicao,
                CfeTenderType.vale_presente,
                CfeTenderType.vale_combustivel,
                CfeTenderType.outros
            },
            "0.08": {
                CfeTenderType.dinheiro,
                CfeTenderType.cheque,
                CfeTenderType.cartao_credito,
                CfeTenderType.cartao_debito,
                CfeTenderType.credito_loja,
                CfeTenderType.vale_alimentacao,
                CfeTenderType.vale_refeicao,
                CfeTenderType.vale_presente,
                CfeTenderType.vale_combustivel,
                CfeTenderType.duplicata_mercanti,
                CfeTenderType.boleto,
                CfeTenderType.deposito_bancario,
                CfeTenderType.pagamento_instantaneo_pix,
                CfeTenderType.transferencia_bancaria__ou__carteira_digital,
                CfeTenderType.cash_back,
                CfeTenderType.programa_fidelidade__ou__cashback__ou__credito_virtual,
                CfeTenderType.sem_pagamento,
                CfeTenderType.outros
            }
        }

    def get_tpag(
        self,       # type: CfeTender
        tpag,       # type: int
    ):
        # type: (...) -> int

        pix_estatico = 20
        if tpag == pix_estatico:
            tpag = CfeTenderType.pagamento_instantaneo_pix

        if self.layout_version not in self.tpag_by_version:
            return CfeTenderType.outros

        if tpag not in self.tpag_by_version[self.layout_version]:
            return CfeTenderType.outros

        return tpag


# noinspection SpellCheckingInspection
class CfeTenderType(object):
    dinheiro = 1
    cheque = 2
    cartao_credito = 3
    cartao_debito = 4
    credito_loja = 5
    vale_alimentacao = 10
    vale_refeicao = 11
    vale_presente = 12
    vale_combustivel = 13
    duplicata_mercanti = 14
    boleto = 15
    deposito_bancario = 16
    pagamento_instantaneo_pix = 17
    transferencia_bancaria__ou__carteira_digital = 18
    cash_back = 19
    programa_fidelidade__ou__cashback__ou__credito_virtual = 19
    sem_pagamento = 90
    outros = 99
