"""Evaluate deliberately different IPv4 and IPv6 authorizations offline."""

from datetime import UTC, datetime

from rpkiparrot import MemoryStore
from rpkiparrot.config import FreshnessPolicy
from rpkiparrot.models import (
    Afi,
    Aspa,
    AspaContext,
    AspaRecord,
    AspaStatus,
    AsPath,
    EvaluationContext,
    NeighborRelationship,
    ParsedDataset,
    PayloadKind,
)
from rpkiparrot.query import aspa_providers
from rpkiparrot.validation import validate_aspa

at = datetime(2026, 10, 1, tzinfo=UTC)
store = MemoryStore(context=EvaluationContext.offline(at=at))
snapshot = store.replace_source(
    "example",
    ParsedDataset(
        generated_at=at,
        present=frozenset({PayloadKind.ASPA}),
        aspas=(
            AspaRecord(aspa=Aspa(customer=64496, providers=frozenset({64500}), afi=Afi.IPV4)),
            AspaRecord(aspa=Aspa(customer=64496, providers=frozenset({64501}), afi=Afi.IPV6)),
        ),
    ),
    freshness=FreshnessPolicy(max_age=60),
)
context = AspaContext(local_asn=64502, neighbor_asn=64500, relationship=NeighborRelationship.PEER)
path = AsPath.sequence((64500, 64496))
for afi, status in ((Afi.IPV4, AspaStatus.VALID), (Afi.IPV6, AspaStatus.INVALID)):
    result = validate_aspa(snapshot, path, context=context, afi=afi)
    assert result.status is status and result.afi is afi
    print(afi.name, sorted(aspa_providers(snapshot, 64496, afi=afi).providers), result.status.value)
