using decePubClient.Resources;

using Microsoft.Extensions.Localization;

using SocialPub.ClientModels.Resources;

namespace collAnon.Client.Services
{
	public sealed class CoalescingStringLocalizer
	{
		public readonly IStringLocalizer<AllStrings> _pLocalizer;
		readonly IStringLocalizer<FieldsNameResource> _fLocalizer;
		readonly IStringLocalizer<ErrorsResource> _eLocalizer;

		public CoalescingStringLocalizer(
		IStringLocalizer<AllStrings> pLocalizer,
		IStringLocalizer<FieldsNameResource> fLocalizer,
		IStringLocalizer<ErrorsResource> eLocalizer) =>
			(_pLocalizer, _fLocalizer, _eLocalizer) =
			(pLocalizer, fLocalizer, eLocalizer);

		internal LocalizedString this[string name]
		{
			get
			{
				if (_pLocalizer[name].ResourceNotFound)
					if (_fLocalizer[name].ResourceNotFound)
						if (_eLocalizer[name].ResourceNotFound)
							return new(name, name, false);
						else
							return _eLocalizer[name];
					else
						return _fLocalizer[name];
				else
					return _pLocalizer[name];
			}
		}

		internal LocalizedString this[string name, params object[] arguments]
		{
			get
			{
				if (_pLocalizer[name].ResourceNotFound)
					if (_fLocalizer[name].ResourceNotFound)
						if (_eLocalizer[name].ResourceNotFound)
							return new(name, name, false);
						else
							return _eLocalizer[name, arguments];
					else
						return _fLocalizer[name, arguments];
				else
					return _pLocalizer[name, arguments];
			}
		}
	}
}
