/**
 * Admin tenant audit log routes — admin-dashboard.
 * GET /api/admin/tenants/:slug/audit → filterable audit log
 */
import { Hono } from 'hono'
import { z } from 'zod'
import { createDb } from '@zync/db/queries'
import { getTenantDetailAdmin, getTenantAuditLog } from '@zync/db/queries'
import type { AppEnv } from '../../types'
import { adminAuthMiddleware } from '../../middleware/admin-auth'
import { requireAdminSession } from '../../middleware/guards'
import { requireAdminPermission } from '@zync/auth'

const adminTenantAuditRoutes = new Hono<AppEnv>()

adminTenantAuditRoutes.use('*', adminAuthMiddleware)
adminTenantAuditRoutes.use('*', requireAdminSession())

const AuditQuerySchema = z.object({
  section: z.enum(['payments', 'tier_history', 'services', 'all']).optional().default('all'),
  from: z.string().optional(),
  to: z.string().optional(),
  page: z.coerce.number().int().positive().optional().default(1),
  limit: z.coerce.number().int().positive().max(200).optional().default(50),
})

adminTenantAuditRoutes.get(
  '/:slug/audit',
  requireAdminPermission('admin.audit:read'),
  async (c) => {
    const slug = c.req.param('slug')
    const parsed = AuditQuerySchema.safeParse(c.req.query())
    if (!parsed.success) {
      return c.json({ error: 'Invalid query params', details: parsed.error.flatten() }, 400)
    }

    const db = createDb(c.env)
    const tenant = await getTenantDetailAdmin(db, slug)
    if (!tenant) return c.json({ error: 'Tenant not found' }, 404)

    const { page, limit, section, from, to } = parsed.data
    const result = await getTenantAuditLog(db, tenant.id, { section, from, to, page, limit })

    return c.json(result)
  },
)

export { adminTenantAuditRoutes }
