// Единая точка доступа к логотипам монет.
// Логотипы автоматически подхватываются из этой папки — чтобы добавить новую
// монету, достаточно положить файл `<TICKER>.png` (или `.svg`) рядом с этим
// файлом. Ничего дописывать в код не нужно.
//
// При наличии и PNG, и SVG для одного тикера приоритет отдаётся PNG.

type IconModules = Record<string, string>

const svgIcons = import.meta.glob('./*.svg', {
  eager: true,
  query: '?url',
  import: 'default',
}) as IconModules

const pngIcons = import.meta.glob('./*.png', {
  eager: true,
  query: '?url',
  import: 'default',
}) as IconModules

/** Достаёт тикер из пути вида `./usdt.svg` → `USDT`. */
function tickerFromPath(path: string): string {
  return path.replace(/^\.\//, '').replace(/\.[^.]+$/, '').toUpperCase()
}

function collect(modules: IconModules, target: Record<string, string>) {
  for (const [path, url] of Object.entries(modules)) {
    target[tickerFromPath(path)] = url
  }
}

/** Карта `ТИКЕР → url логотипа`. PNG перекрывает SVG при совпадении тикера. */
export const COIN_ICONS: Record<string, string> = {}
collect(svgIcons, COIN_ICONS) // сначала svg…
collect(pngIcons, COIN_ICONS) // …затем png перекрывает

/** Вернуть url логотипа по тикеру (регистр не важен), либо undefined. */
export function getCoinIcon(ticker: string): string | undefined {
  return COIN_ICONS[ticker.toUpperCase()]
}
