"""Evidence-based ownership classification for managed generated runtime files."""

from __future__ import annotations

import hashlib
from dataclasses import dataclass
from pathlib import Path


OWNERSHIP_CLASSES = {
    "P2HS_MANAGED_UNMODIFIED",
    "P2HS_MANAGED_PLATFORM_EVOLVED",
    "P2HS_MANAGED_CUSTOMER_MODIFIED",
    "CUSTOMER_OWNED",
    "MIXED_OWNERSHIP",
    "UNRESOLVED",
}


@dataclass(frozen=True)
class RuntimeOwnershipEvidence:
    path: str
    ownership_class: str
    origin_revision: str | None
    origin_sha: str | None
    origin_evidence: str
    current_sha: str | None
    current_fingerprint: str
    modification_status: str
    confidence: str


def content_fingerprint(path: str | Path) -> str:
    digest = hashlib.sha256()
    with Path(path).open("rb") as handle:
        for chunk in iter(lambda: handle.read(1024 * 1024), b""):
            digest.update(chunk)
    return f"sha256:{digest.hexdigest()}"


def classify_runtime_file(
    *,
    path: str,
    origin_revision: str | None,
    origin_sha: str | None,
    origin_evidence: str,
    current_sha: str | None,
    origin_fingerprint: str | None,
    current_fingerprint: str,
    later_platform_change: bool = False,
    customer_change: bool = False,
) -> RuntimeOwnershipEvidence:
    """Classify from provenance and change evidence, never path similarity alone."""
    if customer_change and later_platform_change:
        ownership_class = "MIXED_OWNERSHIP"
    elif customer_change:
        ownership_class = "P2HS_MANAGED_CUSTOMER_MODIFIED"
    elif later_platform_change:
        ownership_class = "P2HS_MANAGED_PLATFORM_EVOLVED"
    elif origin_sha and origin_evidence.startswith("p2hs:"):
        ownership_class = "P2HS_MANAGED_UNMODIFIED"
    elif origin_sha:
        ownership_class = "CUSTOMER_OWNED"
    else:
        ownership_class = "UNRESOLVED"
    return RuntimeOwnershipEvidence(
        path=path,
        ownership_class=ownership_class,
        origin_revision=origin_revision,
        origin_sha=origin_sha,
        origin_evidence=origin_evidence,
        current_sha=current_sha,
        current_fingerprint=current_fingerprint,
        modification_status=("customer_modified" if customer_change else "platform_evolved" if later_platform_change else "unmodified"),
        confidence=("high" if ownership_class != "UNRESOLVED" else "low"),
    )
