# Eval Template
from typing import Callable, List


def exact_match(pred: str, truth: str) -> bool:
    return pred.strip().lower() == truth.strip().lower()


def run_eval(agent: Callable[[str], str], cases: List[dict]):
    passed = 0
    for case in cases:
        prediction = agent(case["input"])
        ok = exact_match(prediction, case["expected"])
        if ok:
            passed += 1
        print(f"Input: {case['input'][:60]:<60} Match: {ok}")
    score = passed / len(cases) if cases else 0
    print(f"\nScore: {passed}/{len(cases)} ({score:.0%})")
    return score


SAMPLE_CASES = [
    {"input": "Wat is de hoofdstad van Nederland?", "expected": "Amsterdam"},
    {"input": "Hoeveel is 12 x 12?", "expected": "144"},
    {"input": "Noem een Nederlandse workflow tool.", "expected": "n8n"},
]


def dummy_agent(question: str) -> str:
    return "Amsterdam" if "hoofdstad" in question.lower() else "n8n"


if __name__ == "__main__":
    run_eval(dummy_agent, SAMPLE_CASES)
