namespace ClawdDotNet.Core.Api.Models;

/// <summary>
/// Repräsentiert ein verfügbares LLM-Modell von OpenRouter.
/// </summary>
public sealed class ModelInfo
{
    /// <summary>OpenRouter Modell-ID (z.B. "anthropic/claude-sonnet-4-5")</summary>
    public string Id { get; set; } = "";

    /// <summary>Anzeigename des Modells</summary>
    public string Name { get; set; } = "";

    /// <summary>
    /// Preise laut OpenRouter. Null, wenn der Endpunkt für dieses Modell keine
    /// Angaben liefert — dann darf keine Kostenschätzung vorgetäuscht werden.
    /// </summary>
    public ModelPricing? Pricing { get; set; }

    public override string ToString() => Id;
}

/// <summary>
/// Preise pro einer Million Token. OpenRouter liefert sie im /models-Endpunkt als
/// Preis pro einzelnem Token in Textform.
/// </summary>
public sealed record ModelPricing(decimal InputPer1M, decimal OutputPer1M)
{
    /// <summary>
    /// Wandelt eine OpenRouter-Preisangabe ("0.000003" pro Token) in den Preis pro
    /// einer Million Token um. Gibt null zurück, wenn der Wert unbrauchbar ist.
    /// </summary>
    public static decimal? ParsePerToken(string? value)
    {
        if (string.IsNullOrWhiteSpace(value))
            return null;

        if (!decimal.TryParse(value, System.Globalization.NumberStyles.Float,
                System.Globalization.CultureInfo.InvariantCulture, out var perToken))
        {
            return null;
        }

        return perToken < 0 ? null : perToken * 1_000_000m;
    }
}
