// NullLocales.ts
import type { i18n as I18nInstance } from 'i18next';
import type { Service } from '../types';

// Минимальный i18n-интерфейс под ваши нужды
type MinimalI18n = {
    // Сигнатуры совпадают с i18next, но реализации пустые
    on: (...args: Parameters<I18nInstance['on']>) => void;
    off: (...args: Parameters<I18nInstance['off']>) => void;

    // Упрощённая версия changeLanguage
    changeLanguage: (lng: string) => Promise<void>;

    // Разрешаем изменять language
    language: string;
};

/** Minimal locales stub used when translations are unavailable. */
export default class NullLocales implements Service {
    public name = 'NullLocales';
    public readonly serviceType = 'locales';

    public readonly _i18n: MinimalI18n = {
        on: () => { /* no-op */ },
        off: () => { /* no-op */ },
        changeLanguage: async () => { /* no-op */ },
        language: 'en',
    };

    public get currentLang(): string {
        return this._i18n.language;
    }

    public async load(): Promise<void> {
        // Nothing to load for the null implementation.
    }

    public get(_key: string, _count?: number): string {
        return '{null_locales}';
    }

    public async changeLanguage(lang: string): Promise<void> {
        this._i18n.language = lang;
    }

    public languagesList(): string[] {
        return [];
    }

    public dispose(): void {
        // Nothing to release.
    }
}
