import { sqliteTable, text, index } from 'drizzle-orm/sqlite-core'
import { sql } from 'drizzle-orm'

/**
 * 动态发现的厂商模型元数据。
 *
 * 设计要点：
 * - 每行对应一个 (provider_id, user_id, model_id)。
 * - source 区分 'seed'（内置兜底）与 'dynamic'（从厂商 API 拉取）。
 * - capabilities 存 JSON，包含 thinking/effort/vision/fast 等能力位。
 * - 删除 provider 时由 repository 级联清理对应行。
 */
export const providerModels = sqliteTable(
  'provider_models',
  {
    id: text('id').primaryKey(),
    providerId: text('provider_id').notNull(),
    userId: text('user_id').notNull().default(''),
    modelId: text('model_id').notNull(),
    label: text('label').notNull(),
    capabilities: text('capabilities').notNull().default('{}'),
    aliases: text('aliases').notNull().default('[]'),
    source: text('source').notNull().default('dynamic'), // 'seed' | 'dynamic'
    status: text('status').notNull().default('available'), // 'available' | 'unavailable'
    fetchedAt: text('fetched_at').notNull().default(sql`(datetime('now'))`),
    createdAt: text('created_at').notNull().default(sql`(datetime('now'))`),
    updatedAt: text('updated_at').notNull().default(sql`(datetime('now'))`),
  },
  (t) => ({
    providerUserIdx: index('idx_provider_models_provider_user').on(t.providerId, t.userId),
    modelIdx: index('idx_provider_models_model').on(t.modelId),
  }),
)

export type ProviderModel = typeof providerModels.$inferSelect
export type NewProviderModel = typeof providerModels.$inferInsert
