# Part of Odoo. See LICENSE file for full copyright and licensing details.

from odoo.tools import LazyTranslate


_lt = LazyTranslate(__name__)

PROXY_URL = 'https://mercadopago.api.odoo.com/api/mercado_pago'

PAYMENT_RETURN_ROUTE = '/payment/mercado_pago/return'
OAUTH_RETURN_ROUTE = '/payment/mercado_pago/oauth/return'
WEBHOOK_ROUTE = '/payment/mercado_pago/webhook'


# The countries supported by Mercado Pago.
SUPPORTED_COUNTRIES = {
    'AR',
    'BR',
    'CL',
    'CO',
    'MX',
    'PE',
    'UY',
}

# Mapping of country codes to corresponding currency codes.
CURRENCY_MAPPING = {
    'AR': 'ARS',  # Argentina - Argentine Peso
    'BR': 'BRL',  # Brazil - Brazilian Real
    'CL': 'CLP',  # Chile - Chilean Peso
    'CO': 'COP',  # Colombia - Colombian Peso
    'MX': 'MXN',  # Mexico - Mexican Peso
    'PE': 'PEN',  # Peru - Peruvian Sol
    'UY': 'UYU',  # Uruguay - Uruguayan Peso
}

# Set of currencies where Mercado Pago's minor units deviates from the ISO 4217 standard.
# See https://www.six-group.com/dam/download/financial-information/data-center/iso-currrency/lists/list-one.xls
# vs. https://api.mercadopago.com/currencies. Last seen online: 2024-10-29.
CURRENCY_DECIMALS = {
    'COP': 0,
    'HNL': 0,
    'NIO': 0,
}

# The codes of the payment methods to activate when Mercado Pago is activated.
DEFAULT_PAYMENT_METHOD_CODES = {
    # Primary payment methods.
    'card',
    # Brand payment methods.
    'amex',
    'visa',
    'mastercard',
    'argencard',
    'ceconsud',
    'cordobesa',
    'codensa',
    'lider',
    'magna',
    'naranja',
    'nativa',
    'oca',
    'presto',
    'tarjeta_mercadopago',
    'shopping',
    'elo',
    'hipercard',
}

# Mapping of payment method codes to Mercado Pago codes.
PAYMENT_METHODS_MAPPING = {
    'card': 'debit_card,credit_card,prepaid_card',
    'paypal': 'digital_wallet',
    'mastercard': 'master',
    'mercado_pago_wallet': 'mercado_pago',
}

# Mapping of transaction states to Mercado Pago payment statuses.
# See https://www.mercadopago.com.mx/developers/en/reference/payments/_payments_id/get.
TRANSACTION_STATUS_MAPPING = {
    'pending': ('pending', 'in_process', 'in_mediation', 'authorized'),
    'done': ('approved', 'refunded'),
    'canceled': ('cancelled', 'null'),
    'error': ('rejected',),
}

# Mapping of error states to Mercado Pago error messages.
# See https://www.mercadopago.com.ar/developers/en/docs/checkout-api/response-handling/collection-results
ERROR_MESSAGE_MAPPING = {
    'accredited': _lt(
        "Your payment has been credited. In your summary you will see the charge as a statement "
        "descriptor."
    ),
    'pending_contingency': _lt(
        "We are processing your payment. Don't worry, in less than 2 business days, we will notify "
        "you by e-mail if your payment has been credited."
    ),
    'pending_review_manual': _lt(
        "We are processing your payment. Don't worry, less than 2 business days we will notify you "
        "by e-mail if your payment has been credited or if we need more information."
    ),
    'cc_rejected_bad_filled_card_number': _lt("Check the card number."),
    'cc_rejected_bad_filled_date': _lt("Check expiration date."),
    'cc_rejected_bad_filled_other': _lt("Check the data."),
    'cc_rejected_bad_filled_security_code': _lt("Check the card security code."),
    'cc_rejected_blacklist': _lt("We were unable to process your payment, please use another card."),
    'cc_rejected_call_for_authorize': _lt("You must authorize the payment with this card."),
    'cc_rejected_card_disabled': _lt(
        "Call your card issuer to activate your card or use another payment method. The phone "
        "number is on the back of your card."
    ),
    'cc_rejected_card_error': _lt(
        "We were unable to process your payment, please check your card information."
    ),
    'cc_rejected_duplicated_payment': _lt(
        "You have already made a payment for that value. If you need to pay again, use another card"
        " or another payment method."
    ),
    'cc_rejected_high_risk': _lt(
        "We were unable to process your payment, please use another card."
    ),
    'cc_rejected_insufficient_amount': _lt("Your card has not enough funds."),
    'cc_rejected_invalid_installments': _lt(
        "This payment method does not process payments in installments."
    ),
    'cc_rejected_max_attempts': _lt(
        "You have reached the limit of allowed attempts. Choose another card or other means of "
        "payment."
    ),
    'cc_rejected_other_reason': _lt("Payment was not processed, use another card or contact issuer.")
}
