from modelcommon.sitef import PaymentCodes
from pos_model import TenderType

from model import TPag


class SitefTPag(object):

    def __init__(
        self,   # type: TPag
    ):

        self.t_pag_dict = {
            "00001": TPag.VALE_ALIMENTACAO,
            "10001": TPag.VALE_ALIMENTACAO,
            "10002": TPag.VALE_ALIMENTACAO,
            "10003": TPag.VALE_ALIMENTACAO,
            "10005": TPag.VALE_ALIMENTACAO,
            "10006": TPag.VALE_ALIMENTACAO,
            "10007": TPag.VALE_ALIMENTACAO,
            "10008": TPag.VALE_ALIMENTACAO,
            "10009": TPag.VALE_ALIMENTACAO,
            "10010": TPag.VALE_ALIMENTACAO,
            "10011": TPag.VALE_ALIMENTACAO,
            "10021": TPag.VALE_REFEICAO,
            "10022": TPag.VALE_ALIMENTACAO,
            "10023": TPag.VALE_ALIMENTACAO,
            "10024": TPag.VALE_REFEICAO,
            "10026": TPag.VALE_ALIMENTACAO,
            "10027": TPag.VALE_ALIMENTACAO,
            "10028": TPag.VALE_REFEICAO,
            "10029": TPag.VALE_ALIMENTACAO,
            "10030": TPag.VALE_PRESENTE,
            "10031": TPag.VALE_PRESENTE,
            "10032": TPag.VALE_ALIMENTACAO,
            "10033": TPag.VALE_COMBUSTIVEL,
            "10051": TPag.VALE_ALIMENTACAO,
            "10053": TPag.VALE_ALIMENTACAO,
            "10054": TPag.VALE_COMBUSTIVEL,
            "10055": TPag.VALE_ALIMENTACAO,
            "60110024": TPag.PIX,
        }

    def get_t_pag(
        self,               # type: SitefTPag
        card_type,          # type: str
        payment_code,       # type: int
        electronic_type,    # type: int
    ):
        # type: (...) -> str

        t_pag = self._get_t_pag_from_payment(
            payment_code=payment_code,
            electronic_type=electronic_type,
        )

        if t_pag == TPag.CARTEIRA_DIGITAL:
            return self.t_pag_dict.get(card_type, TPag.CARTEIRA_DIGITAL)
        if t_pag == TPag.DEBITO:
            return self.t_pag_dict.get(card_type, TPag.DEBITO)
        return t_pag

    @staticmethod
    def _get_t_pag_from_payment(
        payment_code,       # type: int
        electronic_type,    # type: int
    ):
        # type: (...) -> str

        if payment_code == PaymentCodes.debit:
            return TPag.DEBITO
        if payment_code == PaymentCodes.credit:
            return TPag.VALE_PRESENTE if electronic_type == TenderType.gift_card else TPag.CREDITO
        if payment_code == PaymentCodes.digital_wallet:
            return TPag.CARTEIRA_DIGITAL

        return ""
