import { Injectable, inject } from '@angular/core'
import { HashMap } from '@core/types'
import { TranslateParams, TranslocoService } from '@jsverse/transloco'
import { BehaviorSubject, map, switchMap } from 'rxjs'

@Injectable()
export class I18nService {
	private readonly _translocoService = inject(TranslocoService)

	private readonly languageSubject = new BehaviorSubject<string>(this._translocoService.getActiveLang())
	readonly language$ = this.languageSubject.asObservable()

	constructor() {
		this._translocoService.langChanges$
			.pipe(
				// Makes sure selected language is loaded before publishing value
				switchMap((langId) => this._translocoService.load(langId).pipe(map(() => langId))),
			)
			.subscribe({
				next: (langId) => this.languageSubject.next(langId),
			})
	}

	setLanguage(langId: string): void {
		this._translocoService.setActiveLang(langId)
	}

	translate(key: TranslateParams, params?: HashMap): string {
		return this._translocoService.translate(key, params)
	}
}
