#!/usr/bin/env python3
"""Offline synthetic assortment-gap triage. No network, files, or external packages."""
from collections import Counter

REQUIRED = {"category", "variant", "identifier", "reference_coverage", "compared_catalog_coverage",
            "availability", "own_catalog_membership"}


def triage(row):
    """Return a review disposition; supplied fields are evidence, never demand or sales facts."""
    if not isinstance(row, dict) or not REQUIRED.issubset(row):
        return "HOLD", "incomplete evidence"
    if (row["reference_coverage"] != "COMPLETE_CURRENT"
            or row["compared_catalog_coverage"] != "COMPLETE_CURRENT"):
        return "HOLD", "reference or compared catalog coverage incomplete or not current"
    if row["category"] != "ALIGNED":
        return "HOLD", "taxonomy mismatch"
    if row["identifier"] != "MATCHED" or row["variant"] != "MATCHED":
        return "HOLD", "identity or variant mismatch"
    if row["own_catalog_membership"] == "PRESENT":
        return "NO_GAP", "comparable item is present in the compared catalog"
    if row["own_catalog_membership"] != "ABSENT_CONFIRMED":
        return "HOLD", "compared catalog membership unknown"
    if row["availability"] in {"OUT_OF_STOCK", "PREORDER", "BACKORDER"}:
        return "HOLD", "temporarily or non-currently purchasable"
    if row["availability"] != "IN_STOCK":
        return "HOLD", "availability unknown"
    return "REVIEW", "comparable item confirmed absent from complete current catalog evidence"


def self_test():
    base = dict(category="ALIGNED", variant="MATCHED", identifier="MATCHED",
                reference_coverage="COMPLETE_CURRENT", compared_catalog_coverage="COMPLETE_CURRENT",
                availability="IN_STOCK", own_catalog_membership="ABSENT_CONFIRMED")
    rows = {
        "A": base,  # only this is an assortment-review candidate
        "B": {**base, "identifier": "UNKNOWN"},
        "C": {**base, "category": "MISMATCHED"},
        "D": {**base, "reference_coverage": "PARTIAL"},
        "E": {**base, "availability": "OUT_OF_STOCK"},
        "F": {**base, "availability": "UNKNOWN"},
        "G": {**base, "variant": "MISMATCHED"},
        "H": {**base, "own_catalog_membership": "PRESENT"},
        "I": {**base, "own_catalog_membership": "UNKNOWN"},
        "J": {**base, "own_catalog_membership": "PRESENT", "variant": "MISMATCHED"},
        "K": {**base, "compared_catalog_coverage": "STALE"},
    }
    results = {key: triage(value) for key, value in rows.items()}
    assert results["A"] == ("REVIEW", "comparable item confirmed absent from complete current catalog evidence")
    assert results["B"][0] == results["C"][0] == results["D"][0] == "HOLD"
    assert results["E"] == ("HOLD", "temporarily or non-currently purchasable")
    assert results["F"] == ("HOLD", "availability unknown")
    assert results["G"] == ("HOLD", "identity or variant mismatch")
    assert results["H"] == ("NO_GAP", "comparable item is present in the compared catalog")
    assert results["I"] == ("HOLD", "compared catalog membership unknown")
    assert results["J"] == ("HOLD", "identity or variant mismatch")
    assert results["K"] == ("HOLD", "reference or compared catalog coverage incomplete or not current")
    return results


if __name__ == "__main__":
    results = self_test()
    print("offline_synthetic_catalog_gap_fixture")
    print("network_requests=0")
    print("decision_counts=" + repr(dict(Counter(decision for decision, _ in results.values()))))
    print("review_candidates=" + repr([key for key, (decision, _) in results.items() if decision == "REVIEW"]))
    print("counterexamples_passed=10")
