import 'dotenv/config';
import { createPrismaClient } from '../prisma/client.js';
import { createApp } from './app.js';

const databaseUrl = process.env.DATABASE_URL;
const sessionSecret = process.env.SESSION_SECRET;
if (!databaseUrl || !sessionSecret || sessionSecret.length < 32) throw new Error('Configure DATABASE_URL and SESSION_SECRET (at least 32 characters).');
const port = Number(process.env.PORT ?? 3000);
const origin = process.env.APP_ORIGIN ?? `http://localhost:${port}`;
if (new URL(origin).origin !== origin) throw new Error('APP_ORIGIN must be an origin without a trailing slash or path.');
const db = createPrismaClient(databaseUrl);
const { app, close } = createApp(db, { databaseUrl, sessionSecret, origin, production: process.env.NODE_ENV === 'production', trustProxy: Number(process.env.TRUST_PROXY ?? 0) });
const server = app.listen(port, () => console.log(`UNAIR Signage: ${origin}`));
for (const signal of ['SIGINT', 'SIGTERM']) process.once(signal, () => {
  server.close(() => { void Promise.all([close(), db.$disconnect()]).then(() => process.exit(0)); });
});
