// -----------------------------------------------------------------------------
// PolicyDecisionAttestationOptions.cs
// Sprint: SPRINT_3801_0001_0001_policy_decision_attestation
// Description: Configuration options for policy decision attestation service.
// -----------------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
namespace StellaOps.Policy.Engine.Attestation;
///
/// Configuration options for .
///
public sealed class PolicyDecisionAttestationOptions
{
///
/// Configuration section name.
///
public const string SectionName = "PolicyDecisionAttestation";
///
/// Whether attestation creation is enabled.
///
public bool Enabled { get; set; } = true;
///
/// Whether to use the Signer service for signing.
/// If false, attestations will be created unsigned (for dev/test only).
///
public bool UseSignerService { get; set; } = true;
///
/// Default key ID to use for signing (null = use signer default).
///
public string? DefaultKeyId { get; set; }
///
/// Whether to submit attestations to Rekor by default.
///
public bool SubmitToRekorByDefault { get; set; } = false;
///
/// Rekor server URL (null = use default Sigstore Rekor).
///
public string? RekorUrl { get; set; }
///
/// Default TTL for attestation validity (hours).
///
[Range(1, 8760)] // 1 hour to 1 year
public int DefaultTtlHours { get; set; } = 24;
///
/// Whether to include evidence references by default.
///
public bool IncludeEvidenceRefs { get; set; } = true;
///
/// Whether to include gate details in attestations.
///
public bool IncludeGateDetails { get; set; } = true;
///
/// Whether to include violation details in attestations.
///
public bool IncludeViolationDetails { get; set; } = true;
///
/// Maximum number of violations to include in an attestation.
///
[Range(1, 1000)]
public int MaxViolationsToInclude { get; set; } = 100;
///
/// Whether to log attestation creation events.
///
public bool EnableAuditLogging { get; set; } = true;
///
/// Timeout for signer service calls (seconds).
///
[Range(1, 300)]
public int SignerTimeoutSeconds { get; set; } = 30;
///
/// Timeout for Rekor submissions (seconds).
///
[Range(1, 300)]
public int RekorTimeoutSeconds { get; set; } = 60;
}