'use client';

/**
 * EN: Custom translation hook
 * VI: Hook translation tùy chỉnh
 */

import { useI18n } from '@/contexts/i18n-context';
import enMessages from '../i18n/messages/en.json';
import viMessages from '../i18n/messages/vi.json';

/**
 * EN: Custom hook for translations with locale management
 * VI: Hook tùy chỉnh cho translations với quản lý locale
 *
 * @example
 * ```tsx
 * const t = useTranslation();
 * const saveText = t('common.save');
 * const loginTitle = t('auth.login.title');
 * ```
 */
export function useTranslation() {
  const { locale, setLocale } = useI18n();

  // EN: Get messages based on current locale
  // VI: Lấy messages dựa trên locale hiện tại
  const messages = locale === 'vi' ? viMessages : enMessages;

  /**
   * EN: Translation function that supports nested keys and interpolation
   * VI: Hàm translation hỗ trợ nested keys và interpolation
   */
  const t = (key: string, values?: Record<string, any>): string => {
    const keys = key.split('.');
    let value: any = messages;

    // EN: Navigate through nested object
    // VI: Điều hướng qua nested object
    for (const k of keys) {
      if (value && typeof value === 'object' && k in value) {
        value = value[k];
      } else {
        // EN: Return key if translation not found (fallback)
        // VI: Trả về key nếu không tìm thấy translation (fallback)
        console.warn(`Translation missing for key: ${key} in locale: ${locale}`);
        return key;
      }
    }

    // EN: Return the translation if it's a string
    // VI: Trả về translation nếu là string
    if (typeof value === 'string') {
      // EN: Simple interpolation for {variable} placeholders
      // VI: Interpolation đơn giản cho placeholders {variable}
      if (values) {
        return Object.entries(values).reduce((str, [key, val]) => {
          return str.replace(new RegExp(`{${key}}`, 'g'), String(val));
        }, value);
      }
      return value;
    }

    return key;
  };

  return {
    /**
     * EN: Translation function / VI: Hàm translation
     */
    t,
    /**
     * EN: Current locale / VI: Locale hiện tại
     */
    locale,
    /**
     * EN: Set locale function / VI: Hàm đặt locale
     */
    setLocale,
  };
}
