import { PrismaClient } from '@prisma/client';
import bcrypt from 'bcryptjs';

const prisma = new PrismaClient();

async function main() {
  const args = process.argv.slice(2);

  if (args.length < 3) {
    console.error('Usage: npx ts-node scripts/create-user.ts <email> <password> <role> [name]');
    console.error('Roles: admin, contributor, viewer');
    process.exit(1);
  }

  const [email, password, role, name] = args;
  const validRoles = ['admin', 'contributor', 'viewer'];

  if (!validRoles.includes(role)) {
    console.error(`Invalid role "${role}". Must be one of: ${validRoles.join(', ')}`);
    process.exit(1);
  }

  const existingUser = await prisma.user.findUnique({
    where: { email },
  });

  if (existingUser) {
    console.error(`User with email ${email} already exists`);
    process.exit(1);
  }

  const passwordHash = await bcrypt.hash(password, 12);

  const user = await prisma.user.create({
    data: {
      email,
      passwordHash,
      name: name || null,
      role,
    },
  });

  console.log(`User created successfully:`);
  console.log(`  ID: ${user.id}`);
  console.log(`  Email: ${user.email}`);
  console.log(`  Name: ${user.name || '(not set)'}`);
  console.log(`  Role: ${user.role}`);
}

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