import { citizenUser, fetchCitizenCurrentUser } from '~/composables/citizenAuth'
import { $XCTN_TOKEN } from '~/utils/$fetchCitizen'

export default defineNuxtPlugin(async () => {
  const citizen_user = citizenUser()
  const token = useCookie<string | null>($XCTN_TOKEN)

  // useState survives Nuxt navigation, so bootstrap only once per app lifecycle.
  if (citizen_user.value !== undefined) return

  // No cookie means no API request is necessary; middleware can immediately
  // treat the visitor as anonymous.
  if (!token.value) {
    citizen_user.value = null
    return
  }

  try {
    // Validate cookie-backed sessions before route middleware decides whether a
    // protected page or guest page is allowed to render.
    citizen_user.value = await fetchCitizenCurrentUser()

    if (!citizen_user.value) {
      token.value = null
    }
  } catch (error) {
    // Unexpected network/server errors are logged and fail closed for this boot.
    console.error('[Citizen Auth Bootstrap Error]', error)
    citizen_user.value = null
  }
})
