using System.Collections.Immutable;
using System.Text.Json.Serialization;

namespace StellaOps.Feedser.Source.Ru.Nkcki.Internal;

internal sealed record RuNkckiVulnerabilityDto(
    string? FstecId,
    string? MitreId,
    DateTimeOffset? DatePublished,
    DateTimeOffset? DateUpdated,
    string? CvssRating,
    bool? PatchAvailable,
    string? Description,
    RuNkckiCweDto? Cwe,
    ImmutableArray<string> ProductCategories,
    string? Mitigation,
    string? VulnerableSoftwareText,
    bool? VulnerableSoftwareHasCpe,
    ImmutableArray<RuNkckiSoftwareEntry> VulnerableSoftwareEntries,
    double? CvssScore,
    string? CvssVector,
    double? CvssScoreV4,
    string? CvssVectorV4,
    string? Impact,
    string? MethodOfExploitation,
    bool? UserInteraction,
    ImmutableArray<string> Urls,
    ImmutableArray<string> Tags)
{
    [JsonIgnore]
    public string AdvisoryKey => !string.IsNullOrWhiteSpace(FstecId)
        ? FstecId!
        : !string.IsNullOrWhiteSpace(MitreId)
            ? MitreId!
            : Guid.NewGuid().ToString();
}

internal sealed record RuNkckiCweDto(int? Number, string? Description);

internal sealed record RuNkckiSoftwareEntry(string Identifier, string Evidence, ImmutableArray<string> RangeExpressions);
