/**
 * Catálogo duplicado desde `messages/{locale}.json` → `sidebar.doda_form`.
 * Los JSON viven bajo `src/` para que Vite los empaquete; importar `../../../messages/*`
 * provocaba `GET /messages/*.json?import` → 403 con la config actual del dev server.
 */
import { getLocale } from '$lib/paraglide/runtime';
import esDoda from './doda-form/messages.es.json';
import enDoda from './doda-form/messages.en.json';
import type { AmericanPedimentoTipoError } from '$lib/components/dashboard/general_catalogs/doda/doda-form-helpers';

const esBlock = esDoda;
const enBlock = enDoda ?? esBlock;
if (!esBlock) {
	throw new Error('doda-form: empty messages.es.json');
}
const blocks = { es: esBlock, en: enBlock! };

export type DodaFormKey = keyof typeof esDoda;

const AMERICAN_TIPO_ERR: Record<AmericanPedimentoTipoError, DodaFormKey> = {
	required: 'err_american_tipo_required',
	import_range: 'err_american_tipo_import',
	export_range: 'err_american_tipo_export',
	op_undefined: 'err_american_op_undefined'
};

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

/**
 * Idioma real de la app (cookie / Paraglie). No usar solo el path: el dashboard suele
 * ser `/dashboard/...` con locale en `PARAGLIDE_LOCALE`, no `/en/dashboard/...`.
 */
export function dodaFormLocaleFromRuntime(): 'en' | 'es' {
	return getLocale() === 'en' ? 'en' : 'es';
}

/** Si alguna ruta usara prefijo URL `/en/...`, puedes combinar con runtime. */
export function dodaFormLocaleFromPathname(pathname: string): 'en' | 'es' {
	return pathname.split('/').filter(Boolean)[0] === 'en' ? 'en' : 'es';
}

export function dodaFormT(
	locale: 'en' | 'es',
	key: DodaFormKey,
	params?: Record<string, string | number>
): string {
	const block = blocks[locale] ?? blocks.es;
	const raw = block[key] ?? blocks.es[key] ?? String(key);
	return interpolate(String(raw), params);
}

export function dodaFormAmericanTipoMessage(
	locale: 'en' | 'es',
	code: AmericanPedimentoTipoError
): string {
	return dodaFormT(locale, AMERICAN_TIPO_ERR[code]);
}
