import { createHtmlTransformer } from '#lib/html-utils/html-transformer'
import { injectGlobalDataIntoHTML } from '#lib/html-utils/inject-global-data'
import * as Theme from '#lib/theme/theme'
import type { PolenGlobalData } from '../../constants.js'

/**
 * HTML transformer that injects Polen global data based on request context
 * This runs in both dev and production modes to ensure consistent behavior
 */
export const createPolenDataInjector = () => {
  return createHtmlTransformer((html, ctx) => {
    // Create theme manager to read cookies
    const themeManager = Theme.createThemeManager({
      cookieName: `polen-theme-preference`,
    })

    // Get theme from request cookies
    const cookies = ctx.req.header(`cookie`) || ``
    const cookieTheme = themeManager.readCookie(cookies)

    // Use existing Polen global data if available, otherwise create new
    const polenData: PolenGlobalData = globalThis.__POLEN__ || {
      serverContext: {
        theme: cookieTheme || 'system', // No cookie means system preference
        isDev: !__BUILDING__, // true in dev, false in production
      },
    }

    // Just inject the Polen data, no additional code
    return injectGlobalDataIntoHTML(html, '__POLEN__', polenData)
  })
}
