"""Fictional teaching fixtures only. No automatic PII detection or AI calls."""
import json
from importlib.metadata import version
from presidio_anonymizer import AnonymizerEngine
from presidio_anonymizer.entities import OperatorConfig, RecognizerResult

TEXT = (
    "Alex Morgan (alex@example.com) reports that the export button fails. "
    "Reply to alex@example.com. Internal case: HARBOR-417."
)
KNOWN = [("PERSON", "Alex Morgan"), ("EMAIL_ADDRESS", "alex@example.com")]


def replace_known(text, known):
    """Mark every exact occurrence of explicitly supplied, non-overlapping values."""
    spans = []
    for entity_type, literal in known:
        if not literal:
            raise ValueError("Empty literal is not allowed")
        start = 0
        while (start := text.find(literal, start)) != -1:
            # 1.0 marks an authored span; it is not a detection confidence claim.
            spans.append(RecognizerResult(entity_type, start, start + len(literal), 1.0))
            start += len(literal)
    operators = {
        "PERSON": OperatorConfig("replace", {"new_value": "[PERSON]"}),
        "EMAIL_ADDRESS": OperatorConfig("replace", {"new_value": "[EMAIL]"}),
    }
    result = AnonymizerEngine().anonymize(
        text=text, analyzer_results=spans, operators=operators
    )
    return {"text": result.text, "supplied_spans": len(spans),
            "replacements": len(result.items)}


def main():
    cases = {
        "selected_values": replace_known(TEXT, KNOWN),
        "omitted_email": replace_known(TEXT, KNOWN[:1]),
        "no_spans": replace_known(TEXT, []),
        "case_variant": replace_known("ALEX MORGAN: export button fails.", KNOWN),
    }
    print(json.dumps({"python_package": version("presidio-anonymizer"),
                      "fictional_input": TEXT, "cases": cases}, indent=2))


if __name__ == "__main__":
    main()
