import { NextRequest } from 'next/server'
import { getSessionUser } from '@/lib/auth'
import { readSession, setSessionCookie } from '@/lib/auth/session'
import { sameSiteRedirect } from '@/lib/app-url'
import { ADMIN_HOME, adminWorkspace, isAdminPreview } from '@/lib/domain/modes'
import { logRoleAction } from '@/lib/data/modes'

/**
 * Admin → Switch Mode (§14, §27): open one supported interface. A product view
 * is a preview and creates no membership; admin tools clear the preview.
 */
export async function GET(req: NextRequest) {
  const user = await getSessionUser()
  if (!user) return sameSiteRedirect('/login')
  if (user.role !== 'admin') return sameSiteRedirect('/dashboard')
  const w = adminWorkspace(req.nextUrl.searchParams.get('workspace'))
  const session = await readSession()
  if (!w || !session) return sameSiteRedirect(ADMIN_HOME)
  const preview = isAdminPreview(w)
  await setSessionCookie({ ...session, preview: preview ? w.key : null })
  await logRoleAction({
    userId: user.id, action: preview ? 'admin_preview_entered' : 'admin_preview_exited',
    actor: { id: user.id, label: user.name || user.email }, detail: { workspace: w.key },
  })
  return sameSiteRedirect(w.href)
}
