import pkg from "@prisma/client";
import bcrypt from "bcryptjs";

const { PrismaClient } = pkg;

const prisma = new PrismaClient();

async function main() {
  // Create or get a test user with PREMIUM plan
  const testEmail = "test.premium@example.com";
  const testPassword = "TestPassword123!";

  // Check if user exists
  let user = await prisma.user.findUnique({
    where: { email: testEmail },
  });

  if (!user) {
    const passwordHash = await bcrypt.hash(testPassword, 10);
    user = await prisma.user.create({
      data: {
        email: testEmail,
        name: "Test Premium User",
        passwordHash,
        plan: "PREMIUM",
        emailVerified: new Date(),
      },
    });
    console.log("Created test premium user:", user.email);
  } else {
    console.log("User already exists:", user.email);
  }

  // Create a test subscription
  if (user.stripeId) {
    console.log("User already has stripeId:", user.stripeId);
  } else {
    const user2 = await prisma.user.update({
      where: { id: user.id },
      data: {
        stripeId: "cus_test_" + Date.now(),
        subscription: {
          create: {
            stripeId: "sub_test_" + Date.now(),
            stripePriceId: "price_test",
            stripeCustomerId: "cus_test_" + Date.now(),
            status: "active",
            currentPeriodEnd: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000),
          },
        },
      },
      include: { subscription: true },
    });
    console.log("Created subscription for user:", user2.email);
  }

  console.log("\nTest user credentials:");
  console.log("Email:", testEmail);
  console.log("Password:", testPassword);
}

main()
  .catch((err) => {
    console.error(err);
    process.exit(1);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });
