import { getPortalSettings, resolvePortalVisibility } from '@zync/db/queries'
import type { PortalVisibility } from '@zync/types'
import type { PortalAuthVariables } from '../../middleware/portalAuth'
import type { AppEnv } from '../../types'

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

export async function requirePortalVisibility(
  c: Parameters<import('hono').MiddlewareHandler<PortalDataEnv>>[0],
  key: keyof PortalVisibility,
): Promise<Response | null> {
  const portal = c.get('portal')
  const db = c.get('db')
  const settings = await getPortalSettings(db, portal.tenantId)
  const visibility = resolvePortalVisibility(settings.portal_visibility)
  if (!visibility[key]) {
    return c.json({ error: 'Not found' }, 404)
  }
  return null
}
