import {
  CurrencyAudIcon,
  CurrencyBrlIcon,
  CurrencyCadIcon,
  CurrencyEurIcon,
  CurrencyGbpIcon,
  CurrencyIdrIcon,
  CurrencyInrIcon,
  CurrencyJpyIcon,
  CurrencyKrwIcon,
  CurrencyMxnIcon,
  CurrencyNokIcon,
  CurrencyPlnIcon,
  CurrencySekIcon,
  CurrencyThbIcon,
  CurrencyTryIcon,
  CurrencyUahIcon,
  CurrencyUsdIcon,
} from '@/icons/generated';

export const SUBSCRIPTION_PLATFORM_TO_OS_MAP: Record<string, string> = {
  apple: 'iOS',
  google: 'Android',
};

export const SUBSCRIPTION_PAGE_VERSIONS = {
  original: 'original',
  aura: 'aura',
} as const;

export type SubscriptionPageVersionKeys =
  (typeof SUBSCRIPTION_PAGE_VERSIONS)[keyof typeof SUBSCRIPTION_PAGE_VERSIONS];

export enum Currency {
  USD = 'USD',
  EUR = 'EUR',
  GBP = 'GBP',
  AUD = 'AUD',
  BRL = 'BRL',
  CAD = 'CAD',
  IDR = 'IDR',
  INR = 'INR',
  JPY = 'JPY',
  KRW = 'KRW',
  MXN = 'MXN',
  NOK = 'NOK',
  PLN = 'PLN',
  SEK = 'SEK',
  THB = 'THB',
  TRY = 'TRY',
  UAH = 'UAH',
}

export const ZERO_DECIMAL_CURRENCIES = [Currency.JPY, Currency.KRW];

export interface CurrencyOption {
  value: Currency;
  label: string;
  icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;
}

export const CURRENCY_OPTIONS: CurrencyOption[] = [
  { value: Currency.USD, label: Currency.USD, icon: CurrencyUsdIcon },
  { value: Currency.EUR, label: Currency.EUR, icon: CurrencyEurIcon },
  { value: Currency.GBP, label: Currency.GBP, icon: CurrencyGbpIcon },
  { value: Currency.AUD, label: Currency.AUD, icon: CurrencyAudIcon },
  { value: Currency.BRL, label: Currency.BRL, icon: CurrencyBrlIcon },
  { value: Currency.CAD, label: Currency.CAD, icon: CurrencyCadIcon },
  { value: Currency.IDR, label: Currency.IDR, icon: CurrencyIdrIcon },
  { value: Currency.INR, label: Currency.INR, icon: CurrencyInrIcon },
  { value: Currency.JPY, label: Currency.JPY, icon: CurrencyJpyIcon },
  { value: Currency.KRW, label: Currency.KRW, icon: CurrencyKrwIcon },
  { value: Currency.MXN, label: Currency.MXN, icon: CurrencyMxnIcon },
  { value: Currency.NOK, label: Currency.NOK, icon: CurrencyNokIcon },
  { value: Currency.PLN, label: Currency.PLN, icon: CurrencyPlnIcon },
  { value: Currency.SEK, label: Currency.SEK, icon: CurrencySekIcon },
  { value: Currency.THB, label: Currency.THB, icon: CurrencyThbIcon },
  { value: Currency.TRY, label: Currency.TRY, icon: CurrencyTryIcon },
  { value: Currency.UAH, label: Currency.UAH, icon: CurrencyUahIcon },
];

export const CURRENCY_TO_LOCALE_MAP: Record<Currency, string> = {
  [Currency.USD]: 'en-US',
  [Currency.EUR]: 'de-DE',
  [Currency.GBP]: 'en-GB',
  [Currency.AUD]: 'en-AU',
  [Currency.BRL]: 'pt-BR',
  [Currency.CAD]: 'en-CA',
  [Currency.IDR]: 'id-ID',
  [Currency.INR]: 'en-IN',
  [Currency.JPY]: 'ja-JP',
  [Currency.KRW]: 'ko-KR',
  [Currency.MXN]: 'es-MX',
  [Currency.NOK]: 'nb-NO',
  [Currency.PLN]: 'pl-PL',
  [Currency.SEK]: 'sv-SE',
  [Currency.THB]: 'th-TH',
  [Currency.TRY]: 'tr-TR',
  [Currency.UAH]: 'uk-UA',
};

export const DEFAULT_CURRENCY = Currency.USD;

export enum PaymentMethodType {
  UPI = 'upi',
}
