/**
 * Portal projects route — tenant-portals (wave 9d, Task 6).
 * GET /api/portal/projects
 */
import { Hono } from 'hono'
import { getPortalProjectDetail, listPortalProjectsDetailed } from '@zync/db/queries'
import type { AppEnv } from '../../types'
import { portalAuthMiddleware, type PortalAuthVariables } from '../../middleware/portalAuth'
import { requirePortalVisibility } from './visibility'

type PortalDataEnv = {
  Bindings: AppEnv['Bindings']
  Variables: PortalAuthVariables
}

export const portalProjectsRoutes = new Hono<PortalDataEnv>()

portalProjectsRoutes.use('*', portalAuthMiddleware)

portalProjectsRoutes.get('/', async (c) => {
  const visibilityError = await requirePortalVisibility(c, 'show_projects')
  if (visibilityError) return visibilityError
  const portal = c.get('portal')
  const db = c.get('db')
  const items = await listPortalProjectsDetailed(db, portal.tenantId, portal.customerId)
  return c.json({ items }, 200)
})

portalProjectsRoutes.get('/:id', async (c) => {
  const visibilityError = await requirePortalVisibility(c, 'show_projects')
  if (visibilityError) return visibilityError
  const portal = c.get('portal')
  const db = c.get('db')
  const project = await getPortalProjectDetail(
    db,
    portal.tenantId,
    portal.customerId,
    c.req.param('id'),
  )
  if (!project) return c.json({ error: 'Not found' }, 404)
  return c.json({ project }, 200)
})
