import Database from 'better-sqlite3'
import path from 'path'
import os from 'os'

const dbPath = process.env.SQLITE_DB_PATH
  ? path.resolve(process.env.SQLITE_DB_PATH)
  : path.join(os.homedir(), '.forge', 'forge.db')

console.log(`Migrating ${dbPath}`)
const db = new Database(dbPath)

db.exec(`
CREATE TABLE IF NOT EXISTS provider_models (
  id TEXT PRIMARY KEY,
  provider_id TEXT NOT NULL,
  user_id TEXT NOT NULL DEFAULT '',
  model_id TEXT NOT NULL,
  label TEXT NOT NULL,
  capabilities TEXT NOT NULL DEFAULT '{}',
  aliases TEXT NOT NULL DEFAULT '[]',
  source TEXT NOT NULL DEFAULT 'dynamic',
  status TEXT NOT NULL DEFAULT 'available',
  fetched_at TEXT NOT NULL DEFAULT (datetime('now')),
  created_at TEXT NOT NULL DEFAULT (datetime('now')),
  updated_at TEXT NOT NULL DEFAULT (datetime('now'))
);

CREATE INDEX IF NOT EXISTS idx_provider_models_provider_user ON provider_models(provider_id, user_id);
CREATE INDEX IF NOT EXISTS idx_provider_models_model ON provider_models(model_id);
`)

function ensureColumn(table: string, column: string, definition: string) {
  const col = db.prepare(`PRAGMA table_info(${table})`).all() as { name: string }[]
  if (col.some((c) => c.name === column)) return
  console.log(`Adding column ${table}.${column}`)
  db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`)
}

ensureColumn('api_providers', 'models_fetched_at', "TEXT NOT NULL DEFAULT ''")
ensureColumn('api_providers', 'models_fetch_error', "TEXT NOT NULL DEFAULT ''")

console.log('Done')
db.close()
