import type { BundledSDK } from "./provider-types"

export function shouldUseCopilotResponsesApi(modelID: string): boolean {
  const match = /^gpt-(\d+)/.exec(modelID)
  if (!match) return false
  return Number(match[1]) >= 5 && !modelID.startsWith("gpt-5-mini")
}

export function useLanguageModel(sdk: any) {
  return sdk.responses === undefined && sdk.chat === undefined
}

// ╔══════════════════════════════════════════════════════════════════╗
// ║  티어별 provider 로딩                                            ║
// ║                                                                   ║
// ║  SAEEOL_TIER는 build.ts define으로 "light"|"code"|"master" 주입    ║
// ║  Bun은 dead branch를 제거하므로 다른 티어의 import()가 제외됨      ║
// ╚══════════════════════════════════════════════════════════════════╝

declare const SAEEOL_TIER: string

type ProviderLoader = () => Promise<(opts: any) => BundledSDK>

// 티어별 파일에서 각각 서로 다른 provider 집합을 import
// Bun은 조건에 맞지 않는 branch의 import()를 dead code로 처리

function getProviders(): Record<string, ProviderLoader> {
  const tier = typeof SAEEOL_TIER === "string" ? SAEEOL_TIER : "master"
  if (tier === "light") {
    const m = require("./tiers/light") as typeof import("./tiers/light")
    return m.lightProviders
  }
  if (tier === "code") {
    const m = require("./tiers/code") as typeof import("./tiers/code")
    return m.codeProviders
  }
  const m = require("./tiers/master") as typeof import("./tiers/master")
  return m.masterProviders
}

export const BUNDLED_PROVIDERS: Record<string, ProviderLoader> = getProviders()
