using KArtSell.Modules.ModelOperations.Domain;

namespace KArtSell.ModelOperations.UnitTests;

public sealed class PromotionGateEvaluatorTests
{
    [Fact]
    public void Passes_evidence_gate_but_still_requires_human_approval()
    {
        var snapshot = new ModelEvaluationSnapshot(
            "GLOBAL",
            "model-1",
            504,
            3,
            0.08m,
            0.01m,
            0.70m,
            0.10m,
            0.97m,
            true,
            0,
            true,
            DateTimeOffset.UtcNow);

        var result = PromotionGateEvaluator.Evaluate(snapshot, PromotionGateThresholds.ResearchBaseline);

        Assert.Equal(GateDecision.Pass, result.Decision);
        Assert.Empty(result.BlockingReasons);
        Assert.True(result.RequiresIndependentValidation);
        Assert.True(result.RequiresHumanApproval);
        Assert.Equal("EVIDENCE_ONLY_NO_AUTO_PROMOTION", result.Boundary);
    }

    [Fact]
    public void Holds_when_any_operational_integrity_error_exists()
    {
        var snapshot = new ModelEvaluationSnapshot(
            "GLOBAL",
            "model-1",
            504,
            3,
            0.08m,
            0.01m,
            0.70m,
            0.10m,
            0.97m,
            true,
            1,
            true,
            DateTimeOffset.UtcNow);

        var result = PromotionGateEvaluator.Evaluate(snapshot, PromotionGateThresholds.ResearchBaseline);

        Assert.Equal(GateDecision.Hold, result.Decision);
        Assert.Contains(result.BlockingReasons, reason => reason.Contains("Operational integrity", StringComparison.Ordinal));
    }
}
