// wci26/trade-links.jsx - shared external trade links for desktop and PWA buy CTAs.

const WCI_UNISWAP_SWAP_URL = 'https://app.uniswap.org/swap';
const WCI_UNISWAP_CHAIN = 'mainnet';
const WCI_UNISWAP_INPUT_CURRENCY = 'ETH';

const wciTradeIsAddress = (value) => /^0x[a-fA-F0-9]{40}$/.test(String(value || '').trim());

const wciTradeConfigCountries = () => {
  if (typeof WCI_LIVE_CONFIG !== 'undefined' && WCI_LIVE_CONFIG.loadConfig) {
    try {
      return WCI_LIVE_CONFIG.loadConfig().countries || {};
    } catch {}
  }
  return WCI_LIVE_ADDRESS_OVERRIDES?.countries || {};
};

const wciResolveCountryTradeAddress = (country) => {
  const direct = country?.tokenAddress || country?.contractTokenAddress || country?.address;
  if (wciTradeIsAddress(direct)) return direct;

  const code = country?.code || country?.isoCode;
  const configured = code ? wciTradeConfigCountries()[code]?.tokenAddress : '';
  return wciTradeIsAddress(configured) ? configured : '';
};

const wciTradeAmountValue = (value) => {
  const amount = Number(value);
  if (!Number.isFinite(amount) || amount <= 0) return '';
  return amount.toFixed(8).replace(/\.?0+$/, '');
};

const wciBuildUniswapSwapUrl = (country, options = {}) => {
  const tokenAddress = wciResolveCountryTradeAddress(country);
  const url = new URL(options.baseUrl || WCI_UNISWAP_SWAP_URL);
  url.searchParams.set('chain', options.chain || WCI_UNISWAP_CHAIN);
  url.searchParams.set('inputCurrency', options.inputCurrency || WCI_UNISWAP_INPUT_CURRENCY);
  if (tokenAddress) url.searchParams.set('outputCurrency', tokenAddress);
  const amount = wciTradeAmountValue(options.amountEth ?? options.value ?? options.amount);
  if (amount) {
    url.searchParams.set('field', options.field || 'input');
    url.searchParams.set('value', amount);
  }
  return url.toString();
};

const wciOpenUniswapSwap = (country, options = {}) => {
  const url = wciBuildUniswapSwapUrl(country, options);
  if (options.newTab) {
    window.open(url, '_blank', 'noopener,noreferrer');
  } else {
    window.location.assign(url);
  }
  return url;
};

const WCI_TRADE_LINKS = {
  uniswapSwapBaseUrl: WCI_UNISWAP_SWAP_URL,
  chain: WCI_UNISWAP_CHAIN,
  inputCurrency: WCI_UNISWAP_INPUT_CURRENCY,
  resolveCountryTokenAddress: wciResolveCountryTradeAddress,
  formatAmountValue: wciTradeAmountValue,
  buildUniswapSwapUrl: wciBuildUniswapSwapUrl,
  openUniswapSwap: wciOpenUniswapSwap,
};

Object.assign(window, {
  WCI_TRADE_LINKS,
  wciBuildUniswapSwapUrl,
});
