import cookieParser from 'cookie-parser'
import cors from 'cors'
import express from 'express'
import rateLimit from 'express-rate-limit'
import helmet from 'helmet'
import { env } from './config/env.js'
import { errorHandler } from './middleware/errorHandler.js'
import { authRouter } from './routes/auth.js'
import { meetingRouter } from './routes/meetings.js'

export const createApp = () => {
  const app = express()
  app.set('trust proxy', 1)
  app.use(helmet())
  app.use(
    cors({
      origin: env.CLIENT_ORIGIN,
      credentials: true,
    }),
  )
  app.use(express.json({ limit: '32kb' }))
  app.use(cookieParser())
  if (env.RATE_LIMIT_MAX > 0) {
    app.use(
      rateLimit({
        windowMs: env.RATE_LIMIT_WINDOW_MS,
        limit: env.RATE_LIMIT_MAX,
        standardHeaders: true,
        legacyHeaders: false,
      }),
    )
  }

  app.get('/api/health', (_req, res) => {
    res.json({ ok: true })
  })
  app.use('/api/auth', authRouter)
  app.use('/api/meetings', meetingRouter)
  app.use(errorHandler)
  return app
}
