const PROJECT_REF = 'niadwgtubzoqshfatzmc';
const MANAGEMENT_TOKEN = process.env.SUPABASE_MANAGEMENT_TOKEN;

if (!MANAGEMENT_TOKEN) {
  console.error('SUPABASE_MANAGEMENT_TOKEN is required.');
  process.exit(1);
}

const API = `https://api.supabase.com/v1/projects/${PROJECT_REF}/database/query`;

async function query(sql: string): Promise<unknown[]> {
  const res = await fetch(API, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${MANAGEMENT_TOKEN}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ query: sql }),
  });
  if (!res.ok) {
    const text = await res.text();
    throw new Error(`HTTP ${res.status}: ${text}`);
  }
  return res.json() as Promise<unknown[]>;
}

const MIGRATIONS: { name: string; sql: string }[] = [
  {
    name: 'add_domain_lock_to_licences',
    sql: `ALTER TABLE licences ADD COLUMN IF NOT EXISTS domain_lock text NULL;`,
  },
];

async function migrate() {
  await query(`
    CREATE TABLE IF NOT EXISTS _migrations (
      name text PRIMARY KEY,
      applied_at timestamptz DEFAULT now()
    )
  `);

  for (const { name, sql } of MIGRATIONS) {
    const rows = await query(`SELECT 1 FROM _migrations WHERE name = '${name.replace(/'/g, "''")}'`);
    if ((rows as unknown[]).length > 0) {
      console.log(`  skip  ${name}`);
      continue;
    }
    await query(sql);
    await query(`INSERT INTO _migrations (name) VALUES ('${name.replace(/'/g, "''")}')`);
    console.log(`  apply ${name}`);
  }

  console.log('Migrations done.');
}

migrate().catch(err => {
  console.error('Migration failed:', err.message);
  process.exit(1);
});
