using System.Text.Json;
using PlanTempus.Application.Features.Localization.Models;

namespace PlanTempus.Application.Features.Localization.Services;

public class JsonLocalizationService : ILocalizationService
{
    private readonly string _translationsPath;

    public JsonLocalizationService(IWebHostEnvironment env)
    {
        _translationsPath = Path.Combine(env.ContentRootPath, "Features", "Localization", "Translations");
    }

    public string CurrentCulture => "da";

    public string Get(string key, string? culture = null)
    {
        culture ??= CurrentCulture;
        var filePath = Path.Combine(_translationsPath, $"{culture}.json");

        if (!File.Exists(filePath))
            return key;

        var json = File.ReadAllText(filePath);
        var doc = JsonDocument.Parse(json);

        var parts = key.Split('.');
        JsonElement current = doc.RootElement;

        foreach (var part in parts)
            if (!current.TryGetProperty(part, out current))
                return key;

        return current.GetString() ?? key;
    }

    public IEnumerable<SupportedCulture> GetSupportedCultures()
    {
        return new List<SupportedCulture>
        {
            new() { Code = "da", Name = "Danish", NativeName = "Dansk" },
            new() { Code = "en", Name = "English", NativeName = "English" }
        };
    }
}
