using System;
using System.Collections.Immutable;
using System.Threading;
using System.Threading.Tasks;

namespace StellaOps.Vexer.Core;

public interface IVexAttestationClient
{
    ValueTask<VexAttestationResponse> SignAsync(VexAttestationRequest request, CancellationToken cancellationToken);

    ValueTask<VexAttestationVerification> VerifyAsync(VexAttestationRequest request, CancellationToken cancellationToken);
}

public sealed record VexAttestationRequest(
    string ExportId,
    VexQuerySignature QuerySignature,
    VexContentAddress Artifact,
    VexExportFormat Format,
    DateTimeOffset CreatedAt,
    ImmutableArray<string> SourceProviders,
    ImmutableDictionary<string, string> Metadata);

public sealed record VexAttestationResponse(
    VexAttestationMetadata Attestation,
    ImmutableDictionary<string, string> Diagnostics);

public sealed record VexAttestationVerification(
    bool IsValid,
    ImmutableDictionary<string, string> Diagnostics);
