/**
 * Store global de i18n — M9.8
 *
 * Zustand store para o locale ativo, com persistência em localStorage.
 */

import { create } from 'zustand';
import {
  t as tPure,
  loadStoredLocale,
  saveStoredLocale,
  type Locale,
  DEFAULT_LOCALE,
} from '../lib/i18n';

interface I18nState {
  locale: Locale;
  setLocale: (l: Locale) => void;
}

/**
 * Função de tradução com escopo do store.
 * Use-a dentro de componentes: `const { t } = useI18n();`
 */
export function useI18n() {
  const locale = useI18nStore((s) => s.locale);
  const setLocale = useI18nStore((s) => s.setLocale);
  const tt = (key: string, params?: Record<string, string | number>) =>
    tPure(key, locale, params);
  return { t: tt, locale, setLocale };
}

export const useI18nStore = create<I18nState>((set) => ({
  locale: loadStoredLocale(),
  setLocale: (l: Locale) => {
    saveStoredLocale(l);
    set({ locale: l });
  },
}));

/**
 * Função utilitária para tradução fora de componentes (utils, hooks, etc.).
 * Retorna a tradução baseada no locale atual do store.
 */
export function tNow(key: string, params?: Record<string, string | number>): string {
  const locale = useI18nStore.getState().locale;
  return tPure(key, locale, params);
}

// Garante que o módulo carrega o locale padrão se nada estiver armazenado
if (typeof window !== 'undefined') {
  const current = useI18nStore.getState().locale;
  if (current !== DEFAULT_LOCALE && !window.localStorage.getItem('ventoapp.locale')) {
    saveStoredLocale(DEFAULT_LOCALE);
  }
}