using Grand.Business.Core.Interfaces.Common.Localization;
using Microsoft.Extensions.Localization;

namespace Grand.Web.Common.Localization;

public class LocService : StringLocalizer<string>
{
    private readonly ITranslationService _translationService;

    public LocService(IStringLocalizerFactory factory) : base(factory)
    {
    }

    public LocService(IStringLocalizerFactory factory, ITranslationService translationService) : base(factory)
    {
        _translationService = translationService;
    }

    public override LocalizedString this[string name] {
        get {
            var resFormat = _translationService.GetResource(name.ToLowerInvariant());
            return new LocalizedString(name, resFormat ?? name, resFormat == null);
        }
    }

    public override LocalizedString this[string name, params object[] arguments] {
        get {
            var resFormat = _translationService.GetResource(name.ToLowerInvariant());
            if (string.IsNullOrEmpty(resFormat)) return new LocalizedString(name, string.Empty, resFormat == null);
            try
            {
                return new LocalizedString(name, string.Format(resFormat, arguments),
                    false);
            }
            catch
            {
                return new LocalizedString(name, resFormat, false);
            }
        }
    }
}