import 'dotenv/config';
import { PrismaPg } from '@prisma/adapter-pg';
import { PrismaClient } from '../src/generated/prisma/client';
import {
  seedIssueMatrixFromSource,
  validateIssueMatrixSeedTarget,
} from './seeds/issue-matrix.seed';

async function main() {
  const apply = process.argv.includes('--apply');
  const batchArguments = process.argv
    .slice(2)
    .filter((argument) => argument.startsWith('--batch='));
  if (
    batchArguments.length > 1 ||
    (batchArguments.length === 1 && batchArguments[0] !== '--batch=oct2026-kh')
  ) {
    throw new Error(
      'Pass --batch=oct2026-kh once, or omit it for the legacy batch',
    );
  }
  const databaseArguments = process.argv
    .slice(2)
    .filter((argument) => argument.startsWith('--database='));
  if (databaseArguments.length > 1) {
    throw new Error('Pass --database only once');
  }
  const invalid = process.argv
    .slice(2)
    .filter(
      (argument) =>
        argument !== '--apply' &&
        !argument.startsWith('--database=') &&
        !argument.startsWith('--batch='),
    );
  if (invalid.length) throw new Error(`Unknown options: ${invalid.join(', ')}`);
  const connectionString = process.env.DATABASE_URL;
  if (!connectionString) throw new Error('DATABASE_URL is missing');
  const target = validateIssueMatrixSeedTarget(
    connectionString,
    databaseArguments[0]?.slice('--database='.length),
  );

  const database = new PrismaClient({
    adapter: new PrismaPg({ connectionString }),
  });
  try {
    const result = await seedIssueMatrixFromSource(
      database,
      apply,
      batchArguments.length ? 'oct2026-kh' : 'legacy',
    );
    console.log(JSON.stringify({ target, ...result }, null, 2));
  } finally {
    await database.$disconnect();
  }
}

main().catch((error: Error) => {
  console.error(error.message);
  process.exitCode = 1;
});
