from __future__ import annotations

import csv
from pathlib import Path

WEAK_WORDS = {"strong", "lightweight", "easy", "robust", "adequate", "safe"}
METHODS = {"inspection", "analysis", "test", "demonstration"}


def load_rows(path: Path) -> list[dict[str, str]]:
    with path.open(newline="", encoding="utf-8") as handle:
        return list(csv.DictReader(handle))


def quality_flags(row: dict[str, str]) -> list[str]:
    text = row["requirement_text"].lower()
    flags: list[str] = []
    if any(word in text for word in WEAK_WORDS):
        flags.append("vague_wording")
    if not row["verification_method"] or row["verification_method"] not in METHODS:
        flags.append("missing_or_invalid_verification_method")
    if not row["acceptance_criterion"]:
        flags.append("missing_acceptance_criterion")
    if not row["owner"]:
        flags.append("missing_owner")
    return flags


def main() -> None:
    rows = load_rows(Path("data/requirements_raw.csv"))
    report = {row["requirement_id"]: quality_flags(row) for row in rows}
    print(report)
    assert report["REQ-LOAD"] == []
    assert "vague_wording" in report["REQ-MASS"]
    assert "missing_acceptance_criterion" in report["REQ-CLEARANCE"]
    assert "missing_or_invalid_verification_method" in report["REQ-DURABILITY"]


if __name__ == "__main__":
    main()
