/**
 * Create an admin user in Neon Auth via direct HTTP call.
 * Run: npx tsx scripts/create-admin-user.ts [email] [password] [name]
 *
 * Makes a direct HTTP request to the Neon Auth API so we don't need
 * a Next.js request context, then updates email_verified in the DB.
 */
import { config } from "dotenv";
config({ path: ".env.local" });
import pg from "pg";

const { Pool } = pg;

async function main() {
  const email = process.argv[2] ?? "admin@example.com";
  const password = process.argv[3] ?? "Admin1234!";
  const name = process.argv[4] ?? "Admin";

  const baseUrl = process.env.NEON_AUTH_BASE_URL!;

  console.log(`Creating user: ${email}`);

  const res = await fetch(`${baseUrl}/sign-up/email`, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Origin": "http://localhost:4000",
      "x-neon-auth-proxy": "node",
    },
    body: JSON.stringify({ email, password, name, callbackURL: "/admin" }),
  });

  const data = await res.json().catch(() => ({}));
  console.log(`Sign-up status: ${res.status}`);

  if (!res.ok) {
    console.error("Failed to create user:", JSON.stringify(data));
    process.exit(1);
  }

  const userId = data.user?.id;
  console.log("User created:", data.user?.email, "| ID:", userId);

  // Mark email verified in DB so they can log in immediately
  if (userId) {
    const pool = new Pool({ connectionString: process.env.DATABASE_URL });
    try {
      await pool.query(
        "UPDATE neon_auth.user SET email_verified = true WHERE id = $1",
        [userId]
      );
      console.log("Email verified in DB.");
    } finally {
      await pool.end();
    }
  }

  console.log(`\nLog in at http://localhost:4000/login with ${email} / ${password}`);
}

main();
