// Route-aware theme management:
// 1. /login route: System OS theme ONLY (window.matchMedia prefers-color-scheme).
//    Does not overwrite stored user portal preference in portal-user-theme.
// 2. Authenticated routes (/dashboard, /services, etc.): colorMode.preference restored from portal-user-theme.
export default defineNuxtPlugin((nuxtApp) => {
  const route = useRoute()
  const colorMode = useColorMode()

  const sync = () => {
    if (!import.meta.client) return

    const isLogin = route.path === '/login' || route.path === '/'
    const isSystemDark = window.matchMedia('(prefers-color-scheme: dark)').matches

    if (isLogin) {
      if (colorMode.preference !== 'system') {
        colorMode.preference = 'system'
      }
      try {
        localStorage.setItem('nuxt-color-mode', 'system')
      } catch {}
      document.documentElement.classList.toggle('dark', isSystemDark)
      document.documentElement.classList.toggle('light', !isSystemDark)
    } else {
      try {
        const savedPortalTheme = localStorage.getItem('portal-user-theme')
        if (savedPortalTheme && (savedPortalTheme === 'dark' || savedPortalTheme === 'light')) {
          if (colorMode.preference !== savedPortalTheme) {
            colorMode.preference = savedPortalTheme
          }
          const isDark = savedPortalTheme === 'dark'
          document.documentElement.classList.toggle('dark', isDark)
          document.documentElement.classList.toggle('light', !isDark)
        } else {
          document.documentElement.classList.toggle('dark', isSystemDark)
          document.documentElement.classList.toggle('light', !isSystemDark)
        }
      } catch {
        // ignore if localStorage is unavailable
      }
    }
  }

  sync()
  nuxtApp.hook('page:finish', sync)
  watch(() => route.path, sync, { immediate: true })

  if (import.meta.client) {
    window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
      sync()
    })
  }
})
