import { Hono } from 'hono'
import type { AppEnv } from '../../types'
import { authMiddleware } from '../../middleware/auth'
import { requirePermission } from '../../middleware/guards'
import { createDb, getInvoiceSettings, updateInvoiceSettings } from '@zync/db/queries'
import { updateInvoiceSettingsSchema } from '@zync/types'

export const invoicingSettingsRoute = new Hono<AppEnv>()

invoicingSettingsRoute.use('*', authMiddleware)

invoicingSettingsRoute.get('/', requirePermission('settings:read'), async (c) => {
  const session = c.get('session')
  if (!session || session.type !== 'user' || !session.tid) {
    return c.json({ error: 'Unauthorized' }, 401)
  }

  const db = createDb(c.env)
  const settings = await getInvoiceSettings(db, session.tid)
  return c.json(settings, 200)
})

invoicingSettingsRoute.patch('/', requirePermission('settings:write'), async (c) => {
  const session = c.get('session')
  if (!session || session.type !== 'user' || !session.tid) {
    return c.json({ error: 'Unauthorized' }, 401)
  }

  const body = await c.req.json().catch(() => null)
  const parsed = updateInvoiceSettingsSchema.safeParse(body)
  if (!parsed.success) {
    return c.json({ error: 'Validation failed', issues: parsed.error.issues }, 422)
  }

  const db = createDb(c.env)
  const updated = await updateInvoiceSettings(db, session.tid, session.sub, parsed.data)
  return c.json(updated, 200)
})
