import type { FastifyPluginAsync } from 'fastify'
import { z } from 'zod'
import { ReportService } from '../../services/report.service.js'

const DailyReportQuerySchema = z.object({
  locationId: z.string().uuid(),
  date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
})

export const reportRoutes: FastifyPluginAsync = async (app) => {
  // X or Z report for a drawer session
  app.get('/reports/drawer/:id', { preHandler: [app.authenticate, app.requirePermission('pos.view')] }, async (request, reply) => {
    const { id } = request.params as { id: string }
    const report = await ReportService.getDrawerReport(app.db, id)
    return reply.send(report)
  })

  // Daily rollup for a location
  app.get('/reports/daily', { preHandler: [app.authenticate, app.requirePermission('pos.view')] }, async (request, reply) => {
    const parsed = DailyReportQuerySchema.safeParse(request.query)
    if (!parsed.success) {
      return reply.status(400).send({ error: { message: 'Validation failed — locationId and date (YYYY-MM-DD) are required', details: parsed.error.flatten(), statusCode: 400 } })
    }
    const report = await ReportService.getDailyReport(app.db, parsed.data.locationId, parsed.data.date)
    return reply.send(report)
  })
}
