"use client";

import { useI18n } from "@/contexts/I18nContext";

function resolveKey(obj: unknown, key: string): string {
  const val = key.split(".").reduce((acc: unknown, k) => {
    if (acc && typeof acc === "object")
      return (acc as Record<string, unknown>)[k];
    return undefined;
  }, obj);
  return typeof val === "string" ? val : key;
}

function interpolate(template: string, params: Record<string, string | number>): string {
  return template.replace(/\{(\w+)\}/g, (_, k) => String(params[k] ?? `{${k}}`));
}

export function useTranslation(namespace: string): {
  t: (key: string, params?: Record<string, string | number>) => string;
} {
  const { messages } = useI18n();
  const ns = (messages[namespace] ?? {}) as Record<string, unknown>;
  return {
    t: (key: string, params?: Record<string, string | number>) => {
      const raw = resolveKey(ns, key);
      return params ? interpolate(raw, params) : raw;
    },
  };
}
