export const BANK_LOGO_BASE_URL = "/banks-repository/";

export const BANK_LOGO_CATALOG = [
  "ABC Brasil",
  "Ailos",
  "Arbi",
  "Asaas IP S.A",
  "Banco BMP",
  "Banco BS2 S.A",
  "Banco BTG Pactual",
  "Banco C6 S.A",
  "Banco da Amazônia S.A",
  "Banco Daycoval",
  "Banco do Brasil S.A",
  "Banco do Estado do Espírito Santo",
  "Banco do Estado do Pará",
  "Banco do Estado do Sergipe",
  "Banco do Nordeste do Brasil S.A",
  "Banco Industrial do Brasil S.A",
  "Banco Inter S.A",
  "Banco Mercantil do Brasil",
  "Banco Original S.A",
  "Banco Paulista",
  "Banco Pine",
  "Banco Rendimento",
  "Banco Safra S.A",
  "Banco Santander Brasil S.A",
  "Banco Sofisa",
  "Banco Topazio",
  "Banco Triângulo - Tribanco",
  "Banco Votorantim",
  "Bank of America",
  "Banrisul",
  "Bees Bank",
  "BK Bank",
  "BMG",
  "BNP Paribas",
  "Bradesco S.A",
  "BRB - Banco de Brasília",
  "Caixa Econômica Federal",
  "Capitual",
  "Contbank",
  "Conta Simples Soluções em Pagamentos",
  "Cora Sociedade Crédito Direto S.A",
  "Credisis",
  "Cresol",
  "Duepay",
  "Efí - Gerencianet",
  "Grafeno",
  "InfinitePay",
  "Ifood Pago",
  "IP4Y",
  "Iugu IP S.A",
  "Linker",
  "MagaluPay",
  "MFUG Brasil",
  "Modobank",
  "Múltiplo Bank",
  "Neon",
  "Omie.cash",
  "Omni",
  "Paycash",
  "Pinbank",
  "Quality Digital Bank",
  "RecargaPay",
  "Sisprime do Brasil",
  "Squid Soluções Financeiras",
  "Starbank",
  "Stone Pagamentos S.A",
  "Sulcredi",
  "Transfeera",
  "Unicred",
  "Uniprime",
  "XP Investimentos",
  "Zemo Bank",
];

export function resolveCatalogName(bankName: string): string | null {
  if (!bankName) return null;
  
  // Normaliza o nome para comparação
  const normalizedName = bankName.trim().toLowerCase();
  
  // Busca no catálogo por correspondência exata ou parcial
  for (const catalogName of BANK_LOGO_CATALOG) {
    if (catalogName.toLowerCase().includes(normalizedName) || 
        normalizedName.includes(catalogName.toLowerCase())) {
      return catalogName;
    }
  }
  
  return null;
}

export function resolveBankDisplayName(bankName: string): string {
  if (!bankName) return "";
  
  // Remove sufixos comuns como S.A, Pagamentos, etc.
  const simplifiedName = bankName
    .replace(/\s+S\.A\.?$/i, "")
    .replace(/\s+Pagamentos.*$/i, "")
    .replace(/\s+Brasil.*$/i, "")
    .replace(/\s+Internet.*$/i, "")
    .replace(/\s+Crédito.*$/i, "")
    .replace(/\s+Direto.*$/i, "")
    .replace(/\s+Soluções.*$/i, "")
    .trim();
  
  return simplifiedName || bankName;
}

export function resolveLogoSrc(
  logoKey: string | null, 
  bankCode: string | null, 
  bankName: string | null
): string {
  let path: string | null = null;

  // Prioridade 1: Logo key específica (se existir)
  if (logoKey) {
    path = logoKey;
  }
  
  // Prioridade 2: Banco com nome conhecido no repositório local
  if (!path && bankName) {
    path = resolveLocalLogoPath(bankName);
  }
  
  // Prioridade 3: Banco por código (fallback)
  if (!path && bankCode && !bankCode.startsWith("CAT-")) {
    path = `${BANK_LOGO_BASE_URL}${bankCode}.svg`;
  }
  
  // Fallback final: Logo padrão
  if (!path) {
    path = "/banks/default.svg";
  }

  return encodeURI(path);
}

export function resolveLocalLogoPath(bankName: string): string | null {
  if (!bankName) return null;

  const normalized = bankName
    .trim()
    .toLowerCase()
    .normalize("NFD")
    .replace(/[\u0300-\u036f]/g, "")
    .replace(/[^a-z0-9]+/g, " ")
    .trim();

  if (normalized.includes("itau")) {
    return "/banks-repository/Itaú Unibanco S.A/itau.svg";
  }

  if (normalized.includes("nubank") || normalized.includes("nu pagamentos")) {
    return "/banks-repository/Nu Pagamentos S.A/nubank-logo-2021.svg";
  }

  if (normalized.includes("pagbank") || normalized.includes("pagseguro")) {
    return "/banks-repository/PagSeguro Internet S.A/logo-pagbank.svg";
  }
  
  // Mapeamento simplificado para nomes do dropdown
  const simplifiedLogoMap: Record<string, string> = {
    "Banco do Brasil": "/banks-repository/Banco do Brasil S.A/banco-do-brasil-sem-fundo.svg",
    "Caixa": "/banks-repository/Caixa Econômica Federal/caixa-economica-federal-1.svg",
    "Itaú": "/banks-repository/Itaú Unibanco S.A/itau.svg",
    "Itau": "/banks-repository/Itaú Unibanco S.A/itau.svg",
    "Bradesco": "/banks-repository/Bradesco S.A/bradesco.svg",
    "Santander": "/banks-repository/Banco Santander Brasil S.A/banco-santander-logo.svg",
    "Inter": "/banks-repository/Banco Inter S.A/inter.svg",
    "C6": "/banks-repository/Banco C6 S.A/c6 bank.svg",
    "BTG Pactual": "/banks-repository/Banco BTG Pactual/btg-pactual.svg",
    "Nubank": "/banks-repository/Nu Pagamentos S.A/nubank-logo-2021.svg",
    "Nu": "/banks-repository/Nu Pagamentos S.A/nubank-logo-2021.svg",
    "Nu Pagamentos": "/banks-repository/Nu Pagamentos S.A/nubank-logo-2021.svg",
    "Arbi": "/banks-repository/Banco Arbi/bancoArbi_Nome.svg",
    "Banco Arbi": "/banks-repository/Banco Arbi/bancoArbi_Nome.svg",
    "Arbis": "/banks-repository/Banco Arbi/bancoArbi_Nome.svg",
    "Mercado Pago": "/banks-repository/Mercado Pago/mercado-pago.svg",
    "PicPay": "/banks-repository/PicPay/Logo-PicPay.svg",
    "PagBank": "/banks-repository/PagSeguro Internet S.A/logo-pagbank.svg",
    "PagSeguro": "/banks-repository/PagSeguro Internet S.A/logo-pagbank.svg",
    "PagSeguro Internet": "/banks-repository/PagSeguro Internet S.A/logo-pagbank.svg",
    "Sicoob": "/banks-repository/Sicoob/sicoob-vector-logo.svg",
    "Sicred": "/banks-repository/Sicredi/logo-svg2.svg",
    "Sicredi": "/banks-repository/Sicredi/logo-svg2.svg",
  };

  // Mapeamento direto baseado na estrutura real do repositório importado
  const localLogoMap: Record<string, string> = {
    // Bancos principais com nomes exatos das pastas
    "Banco do Brasil S.A": "/banks-repository/Banco do Brasil S.A/banco-do-brasil-sem-fundo.svg",
    "Caixa Econômica Federal": "/banks-repository/Caixa Econômica Federal/caixa-economica-federal-1.svg",
    "Itaú Unibanco S.A": "/banks-repository/Itaú Unibanco S.A/itau.svg",
    "Bradesco S.A": "/banks-repository/Bradesco S.A/bradesco.svg",
    "Banco Santander Brasil S.A": "/banks-repository/Banco Santander Brasil S.A/banco-santander-logo.svg",
    "Banco Inter S.A": "/banks-repository/Banco Inter S.A/inter.svg",
    "Banco C6 S.A": "/banks-repository/Banco C6 S.A/c6 bank.svg",
    "Banco BTG Pactual": "/banks-repository/Banco BTG Pacutal/btg-pactual.svg",
    "Nu Pagamentos S.A (Nubank)": "/banks-repository/Nu Pagamentos S.A/nubank-logo-2021.svg",
    "Nu Pagamentos S.A": "/banks-repository/Nu Pagamentos S.A/nubank-logo-2021.svg",
    "Itau Unibanco S.A": "/banks-repository/Itaú Unibanco S.A/itau.svg",
    "Arbi": "/banks-repository/Banco Arbi/bancoArbi_Nome.svg",
    "Banco Arbi": "/banks-repository/Banco Arbi/bancoArbi_Nome.svg",
    
    // Outros bancos importantes
    "Banco Safra S.A": "/banks-repository/Banco Safra S.A/logo-safra.svg",
    "Banco Votorantim": "/banks-repository/Banco Votorantim/banco-bv-logo.svg",
    "Banrisul": "/banks-repository/Banrisul/banrisul-logo-2023.svg",
    "Bank of America": "/banks-repository/Bank of America/bankofamerica-logo.svg",
    "BNP Paribas": "/banks-repository/BNP Paripas/logo-bnp.svg",
    "BRB - Banco de Brasília": "/banks-repository/BRB - Banco de Brasilia/brb-logo.svg",
    
    // Financeiras e fintechs
    "Mercado Pago": "/banks-repository/Mercado Pago/mercado-pago.svg",
    "PagBank": "/banks-repository/PagSeguro Internet S.A/logo-pagbank.svg",
    "PagSeguro Internet S.A": "/banks-repository/PagSeguro Internet S.A/logo-pagbank.svg",
    "PicPay": "/banks-repository/PicPay/Logo-PicPay.svg",
    "Sicoob": "/banks-repository/Sicoob/sicoob-vector-logo.svg",
    "Sicred": "/banks-repository/Sicredi/logo-svg2.svg",
    "Sicredi": "/banks-repository/Sicredi/logo-svg2.svg",
    
    // Bancos menores e fintechs
    "ABC Brasil": "/banks-repository/ABC Brasil/logoabc.svg",
    "Ailos": "/banks-repository/Ailos/logo-ailos.svg",
    "Asaas IP S.A": "/banks-repository/Asaas IP S.A/header-logo-azul.svg",
    "Banco BMP": "/banks-repository/Banco BMP/logo_bmp.svg",
    "Banco BS2 S.A": "/banks-repository/Banco BS2 S.A/Banco_BS2.svg",
    "Banco da Amazônia S.A": "/banks-repository/Banco da Amazônia S.A/banco-da-amazonia.svg",
    "Banco Daycoval": "/banks-repository/Banco Daycoval/logo-Daycoval.svg",
    "Banco do Estado do Espírito Santo": "/banks-repository/Banco do Estado do Espirito Santo/banestes.svg",
    "Banco do Estado do Pará": "/banks-repository/Banco do Estado do Para/banpara-logo-sem-fundo.svg",
    "Banco do Estado do Sergipe": "/banks-repository/Banco do Estado do Sergipe/logo banese.svg",
    "Banco do Nordeste do Brasil S.A": "/banks-repository/Banco do Nordeste do Brasil S.A/Logo_BNB.svg",
    "Banco Industrial do Brasil S.A": "/banks-repository/Banco Industrial do Brasil S.A/BIB-logo.svg",
    "Banco Mercantil do Brasil": "/banks-repository/Banco Mercantil do Brasil S.A/banco-mercantil-novo-azul.svg",
    "Banco Original S.A": "/banks-repository/Banco Original S.A/banco-original-logo-verde.svg",
    "Banco Paulista": "/banks-repository/Banco Paulista/banco-paulista.svg",
    "Banco Pine": "/banks-repository/Banco Pine/banco-pine.svg",
    "Banco Rendimento": "/banks-repository/Banco Rendimento/banco rendimento logo nova .svg",
    "Banco Sofisa": "/banks-repository/Banco Sofisa/logo-banco-sofisa.svg",
    "Banco Topazio": "/banks-repository/Banco Topazio/logo-banco-topazio.svg",
    "Banco Triângulo - Tribanco": "/banks-repository/Banco Triângulo - Tribanco/logotribanco.svg",
    "Bees Bank": "/banks-repository/Bees Bank/BEESBank_Horizontal.svg",
    "BK Bank": "/banks-repository/BK Bank/bkBank.svg",
    "BMG": "/banks-repository/Banco BMG/banco-bmg-logo.svg",
    "Capitual": "/banks-repository/Capitual/logo capitual.svg",
    "Contbank": "/banks-repository/Contbank/logo-contbank.svg",
    "Conta Simples Soluções em Pagamentos": "/banks-repository/Conta Simples Soluções em Pagamentos/conta-simples_logo.svg",
    "Cora Sociedade Crédito Direto S.A": "/banks-repository/Cora Sociedade Credito Direto S.A/icone-cora-rosa-2500px.svg",
    "Credisis": "/banks-repository/Credisis/credisis.svg",
    "Cresol": "/banks-repository/Cresol/Logo-vertical-original.svg",
    "Duepay": "/banks-repository/DuePay/Duepay.svg",
    "Efí - Gerencianet": "/banks-repository/Efí - Gerencianet/logo-efi-bank-laranja.svg",
    "Grafeno": "/banks-repository/Grafeno/grafeno.svg",
    "InfinitePay": "/banks-repository/InfinitePay/InfitePay.svg",
    "Ifood Pago": "/banks-repository/Ifood Pago/LOGO-IFOOD-PAGO-BRANCO.svg",
    "IP4Y": "/banks-repository/Ip4y/logo-blue.svg",
    "Iugu IP S.A": "/banks-repository/Iugo/Iugo.svg",
    "Linker": "/banks-repository/Linker/logo.svg",
    "MagaluPay": "/banks-repository/MagaluPay/logo-magalupay.svg",
    "MFUG Brasil": "/banks-repository/MUFG/mufg-seeklogo.svg",
    "Modobank": "/banks-repository/ModoBank/logo.svg",
    "Múltiplo Bank": "/banks-repository/Multiplo Bank/logotipo.svg",
    "Neon": "/banks-repository/Neon/header-logo-neon.svg",
    "Omie.cash": "/banks-repository/Omie.Cash/omie.svg",
    "Omni": "/banks-repository/Omni/logo-omni.svg",
    "Paycash": "/banks-repository/PayCash/logo.svg",
    "Pinbank": "/banks-repository/PinBank/pinBank.svg",
    "Quality Digital Bank": "/banks-repository/Quality Digital Bank/quality-logo-cinza.svg",
    "RecargaPay": "/banks-repository/RecargaPay/RecargaPay.svg",
    "Sisprime do Brasil": "/banks-repository/Sisprime/logo.svg",
    "Squid Soluções Financeiras": "/banks-repository/Squid Soluções Financeiras/logo.svg",
    "Starbank": "/banks-repository/StarBank/logo.svg",
    "Stone Pagamentos S.A": "/banks-repository/Stone Pagamentos S.A/stone.svg",
    "Sulcredi": "/banks-repository/Sulcredi/marca.svg",
    "Transfeera": "/banks-repository/Transfera/transfeera-logo-verde-nova.svg",
    "Unicred": "/banks-repository/Unicred/verde.svg",
    "Uniprime": "/banks-repository/Uniprime/uniprime.svg",
    "XP Investimentos": "/banks-repository/XP Investimentos/xp-investimentos-logo.svg",
    "Zemo Bank": "/banks-repository/Zemo Bank/logowhite.svg",
  };

  // Primeiro tenta com o nome completo do catálogo
  const catalogName = resolveCatalogName(bankName);
  if (catalogName && catalogName !== bankName) {
    const fullPath = localLogoMap[catalogName];
    if (fullPath) return fullPath;
  }
  
  // Se não encontrou com nome completo, tenta mapear nomes simplificados do dropdown
  const simplifiedName = resolveBankDisplayName(bankName);
  if (simplifiedName && simplifiedName !== bankName) {
    const simplifiedMapping = simplifiedLogoMap[simplifiedName];
    if (simplifiedMapping) return simplifiedMapping;
  }
  
  // Fallback final - tenta mapeamento direto com o nome recebido
  return localLogoMap[bankName] || null;
}
