/**
 * AR Aging Report route — ar-aging-report (wave-12).
 *
 * GET /api/reports/ar-aging
 *   Auth: authMiddleware + requirePermission('invoices:read')
 *   Query: as_of (optional ISO date), currency (optional 3-char)
 *   200 -> ArAgingReport
 *   400 -> invalid params
 *   403 -> no permission
 */
import { Hono } from 'hono'
import { z } from 'zod'
import type { AppEnv } from '../../types'
import { authMiddleware } from '../../middleware/auth'
import { requirePermission } from '../../middleware/guards'
import { buildArAgingReport } from '@zync/db/queries'

const arAgingRoutes = new Hono<AppEnv>()

arAgingRoutes.use('*', authMiddleware)
arAgingRoutes.use('*', requirePermission('invoices:read'))

// ── Query schema ───────────────────────────────────────────────────────────────

const arAgingQuerySchema = z.object({
  as_of: z.string().date().optional(),
  currency: z.string().length(3).toUpperCase().optional(),
})

// ── GET /ar-aging ─────────────────────────────────────────────────────────────

arAgingRoutes.get('/', async (c) => {
  const session = c.get('session')
  if (!session || session.type !== 'user' || !session.tid) {
    return c.json({ error: 'No tenant context' }, 403)
  }
  const tenantId = session.tid
  const db = c.get('db')

  const parsed = arAgingQuerySchema.safeParse(c.req.query())
  if (!parsed.success) {
    return c.json({ error: 'Invalid query params', details: parsed.error.flatten() }, 400)
  }

  const { as_of, currency } = parsed.data
  const report = await buildArAgingReport(db, tenantId, { asOf: as_of, currency })

  return c.json(report)
})

export { arAgingRoutes }
