"""Local teaching example: inspect a CSV without changing it."""
import csv
import sys
from pathlib import Path


def inspect(path):
    seen = set()
    valid = duplicates = invalid = 0
    with Path(path).open(encoding="utf-8-sig", newline="") as stream:
        reader = csv.DictReader(stream)
        if reader.fieldnames != ["id", "task"]:
            raise ValueError("Expected columns: id,task")
        for row in reader:
            if None in row or not row.get("id", "").strip() or not (row.get("task") or "").strip():
                invalid += 1
            elif row["id"].strip() in seen:
                duplicates += 1
            else:
                seen.add(row["id"].strip())
                valid += 1
    return {"valid": valid, "duplicates": duplicates, "invalid": invalid}


if __name__ == "__main__":
    print(inspect(sys.argv[1] if len(sys.argv) > 1 else "tasks.csv"))
