import providerList from './providerList.json';

const assetBase = import.meta.env.BASE_URL || '/';

export interface ProviderModelPreset {
  description: string;
  label: string;
  llmModel: string;
  supportChat?: boolean;
  supportEmbed?: boolean;
  supportFunctionCalling?: boolean;
  supportRerank?: boolean;
}

export interface ProviderPreset {
  description: string;
  icon: string;
  label: string;
  mode: 'hosted' | 'self-hosted';
  options: {
    chatPath?: string;
    embedPath?: string;
    llmEndpoint?: string;
    modelList?: ProviderModelPreset[];
    rerankPath?: string;
  };
  tags?: string[];
  value: string;
}

const providerOptions = providerList as ProviderPreset[];

const normalizeAssetUrl = (url?: string) => {
  if (!url || !url.startsWith('/')) {
    return url || '';
  }
  return `${assetBase}${url.slice(1)}`;
};

export const getProviderPresetByValue = (targetValue?: string) => {
  const preset = providerOptions.find((item) => item.value === targetValue);

  if (!preset) {
    return undefined;
  }

  return {
    ...preset,
    icon: normalizeAssetUrl(preset.icon),
  };
};

/**
 * 根据传入的value，返回对应的icon属性
 * @param targetValue 要匹配的value值
 * @returns 匹配到的icon字符串，未匹配到返回空字符串
 */
export const getIconByValue = (targetValue: string): string =>
  getProviderPresetByValue(targetValue)?.icon || '';

export const isSvgString = (icon: any) => {
  if (typeof icon !== 'string') return false;
  // 简单判断：是否包含 SVG 根标签
  return icon.trim().startsWith('<svg') && icon.trim().endsWith('</svg>');
};

export const getProviderBadgeText = (
  providerName?: string,
  providerType?: string,
) => {
  const preset = getProviderPresetByValue(providerType);
  const source = providerName || preset?.label || providerType || 'AI';
  const ascii = source
    .replaceAll(/[^a-z]/gi, '')
    .slice(0, 2)
    .toUpperCase();

  if (ascii) {
    return ascii;
  }

  return source.replaceAll(/\s+/g, '').slice(0, 2).toUpperCase();
};

export const providerPresets = providerOptions.map((item) => ({
  ...item,
  icon: normalizeAssetUrl(item.icon),
}));
