const { PrismaClient } = require('@prisma/client'); const bcrypt = require('bcrypt'); const { v4: uuidv4 } = require('uuid'); const crypto = require('crypto'); const prisma = new PrismaClient(); const VENUE_NAME = process.env.SETUP_VENUE_NAME || process.argv[2] || 'My Venue'; const ADMIN_EMAIL = process.env.SETUP_ADMIN_EMAIL || process.argv[3] || 'admin@example.com'; const ADMIN_PASSWORD = process.env.SETUP_ADMIN_PASSWORD || process.argv[4] || 'admin123'; async function main() { console.log('=== KoolTab Production Setup ===\n'); // Wipe everything await prisma.auditLog.deleteMany(); await prisma.remoteCommand.deleteMany(); await prisma.openTabSnapshot.deleteMany(); await prisma.tabOwnership.deleteMany(); await prisma.refreshToken.deleteMany(); await prisma.registrationCode.deleteMany(); await prisma.device.deleteMany(); await prisma.clientUser.deleteMany(); await prisma.venue.deleteMany(); console.log('✓ Cleared existing data'); // Create venue const venueId = uuidv4(); await prisma.venue.create({ data: { id: venueId, name: VENUE_NAME } }); console.log(`✓ Created venue: ${VENUE_NAME}`); // Create admin user const hash = await bcrypt.hash(ADMIN_PASSWORD, 10); await prisma.clientUser.create({ data: { id: uuidv4(), venueId, email: ADMIN_EMAIL, passwordHash: hash, name: 'Admin', role: 'admin', }, }); console.log(`✓ Created admin: ${ADMIN_EMAIL}`); console.log('\n=== Setup complete ==='); console.log(` Venue: ${VENUE_NAME}`); console.log(` Venue ID: ${venueId}`); console.log(` Admin: ${ADMIN_EMAIL}`); console.log(` Password: ${ADMIN_PASSWORD}`); console.log('\nSave the Venue ID — the Flutter app needs it to find your venue.'); console.log('Login at https://kooltab.com with the admin credentials above.'); await prisma.$disconnect(); } main().catch((err) => { console.error('Setup failed:', err); process.exit(1); });