import { db, schema } from './db';
import { eq, and } from 'drizzle-orm';
import bcrypt from 'bcrypt';
import { BCRYPT_ROUNDS } from './constants';

const DEMO_EMAIL    = process.env.DEMO_USER_EMAIL    || 'demo@scriba.ai';
const DEMO_PASSWORD = process.env.DEMO_USER_PASSWORD || 'demo123';
const DEMO_NAME     = process.env.DEMO_USER_NAME     || 'Demo User';

export async function seedDatabase() {
  // Check if default user exists
  const existingUser = await db.query.users.findFirst({
    where: eq(schema.users.email, DEMO_EMAIL)
  });

  let userId: string;

  if (!existingUser) {
    console.log('Creating default user...');

    const id = crypto.randomUUID();
    const hashedPassword = await bcrypt.hash(DEMO_PASSWORD, BCRYPT_ROUNDS);

    // Create user
    const [user] = await db.insert(schema.users).values({
      id,
      email: DEMO_EMAIL,
      name: DEMO_NAME,
      emailVerified: true
    }).returning();

    // Create credential account with password
    await db.insert(schema.accounts).values({
      id: crypto.randomUUID(),
      userId: id,
      accountId: DEMO_EMAIL,
      providerId: 'credential',
      password: hashedPassword
    });

    userId = user.id;
    console.log(`Default user created: ${DEMO_EMAIL}`);
  } else {
    userId = existingUser.id;

    // Ensure account with password exists for existing user
    const account = await db.query.accounts.findFirst({
      where: and(
        eq(schema.accounts.userId, userId),
        eq(schema.accounts.providerId, 'credential')
      )
    });

    if (!account) {
      const hashedPassword = await bcrypt.hash(DEMO_PASSWORD, BCRYPT_ROUNDS);
      await db.insert(schema.accounts).values({
        id: crypto.randomUUID(),
        userId,
        accountId: DEMO_EMAIL,
        providerId: 'credential',
        password: hashedPassword
      });
      console.log('Created credential account for existing user');
    }
  }
}
