using System.Text.Json;

namespace MealPlan.Api.Services.Generators;

internal static class AiRecipeJsonParser
{
    public static int GetInt32(JsonElement element, int fallback = 0)
    {
        return element.ValueKind switch
        {
            JsonValueKind.Number when element.TryGetInt32(out var value) => value,
            JsonValueKind.Number => (int)element.GetDecimal(),
            JsonValueKind.String when int.TryParse(element.GetString(), out var parsed) => parsed,
            JsonValueKind.True => 1,
            JsonValueKind.False => 0,
            _ => fallback,
        };
    }

    public static int? GetNullableInt32(JsonElement element)
    {
        if (element.ValueKind is JsonValueKind.Null or JsonValueKind.Undefined) return null;
        return GetInt32(element);
    }

    public static decimal? GetNullableDecimal(JsonElement element)
    {
        return element.ValueKind switch
        {
            JsonValueKind.Null or JsonValueKind.Undefined => null,
            JsonValueKind.Number => element.GetDecimal(),
            JsonValueKind.String when decimal.TryParse(element.GetString(), out var parsed) => parsed,
            _ => null,
        };
    }

    public static string? GetString(JsonElement element) =>
        element.ValueKind == JsonValueKind.String ? element.GetString() : element.ToString();
}
