import { useI18n } from "vue-i18n"

/**
 * Erstellt eine namespaced i18n API mit automatischem Prefix
 * @param {string} namespace - Der Namespace-Prefix (z.B. "pacifico__openstack-billingdashboard")
 * @param {Object} options - Optionale Konfiguration
 * @returns {Object} Namespaced i18n API
 */
export function useNamespacedI18n(namespace, options = {}) {
  const {
    t: globalT,
    te: globalTe,
    tm: globalTm,
    rt: globalRt,
    d,
    n,
    locale,
    fallbackLocale,
    getLocaleMessage,
    setLocaleMessage,
    mergeLocaleMessage,
  } = useI18n()

  const { fallbackToGlobal = true, debugMode = false } = options

  // Hilfsfunktion zum Erstellen des vollständigen Keys
  const createFullKey = (key) => {
    if (!key) return namespace
    return `${namespace}.${key}`
  }

  // Debug-Logging
  const debug = (message, data = {}) => {
    if (debugMode) {
      console.log(`[NamespacedI18n:${namespace}] ${message}`, data)
    }
  }

  // Wrapper für die t-Funktion
  const t = (key, ...args) => {
    const fullKey = createFullKey(key)
    debug("Translating key", { key, fullKey, args })

    // Prüfen ob der Key existiert
    if (globalTe(fullKey)) {
      return globalT(fullKey, ...args)
    }

    // Fallback zum globalen Key wenn aktiviert
    if (fallbackToGlobal && globalTe(key)) {
      debug("Using global fallback", { key })
      return globalT(key, ...args)
    }

    // Standard-Verhalten von vue-i18n
    return globalT(fullKey, ...args)
  }

  // Wrapper für die te-Funktion (translation exists)
  const te = (key) => {
    const fullKey = createFullKey(key)
    const exists = globalTe(fullKey)

    if (!exists && fallbackToGlobal) {
      return globalTe(key)
    }

    return exists
  }

  // Wrapper für die tm-Funktion (translation messages)
  const tm = (key) => {
    const fullKey = createFullKey(key)
    const messages = globalTm(fullKey)

    if (!messages && fallbackToGlobal) {
      return globalTm(key)
    }

    return messages
  }

  // Wrapper für die rt-Funktion (resolve template)
  const rt = (key, ...args) => {
    const fullKey = createFullKey(key)
    return globalRt(fullKey, ...args)
  }

  // Hilfsfunktion zum Setzen von Übersetzungen für diesen Namespace
  const setNamespaceMessages = (locale, messages) => {
    const currentMessages = getLocaleMessage(locale)
    const namespacedMessages = {
      ...currentMessages,
      [namespace]: {
        ...currentMessages[namespace],
        ...messages,
      },
    }
    setLocaleMessage(locale, namespacedMessages)
  }

  // Hilfsfunktion zum Abrufen aller Namespace-Übersetzungen
  const getNamespaceMessages = (locale) => {
    const messages = getLocaleMessage(locale)
    return messages[namespace] || {}
  }

  return {
    t,
    te,
    tm,
    rt,
    d,
    n,
    locale,
    fallbackLocale,
    // Zusätzliche Hilfsfunktionen
    createFullKey,
    namespace,
    setNamespaceMessages,
    getNamespaceMessages,
    debug,
  }
}

// Optional: Als Vue Plugin registrieren
export const NamespacedI18nPlugin = {
  install(app, options = {}) {
    const { namespace = "default" } = options

    app.config.globalProperties.$nt = (key, ...args) => {
      const { t } = useI18n()
      return t(`${namespace}.${key}`, ...args)
    }

    app.provide("namespacedI18n", useNamespacedI18n(namespace))
  },
}
