"""Recount published design facts; not a gait analysis or source-authentication tool."""
from collections import Counter
import json
from pathlib import Path


def recount(data):
    if data["evidence_type"] != "manual_transcription_of_published_study_design":
        raise ValueError("Design transcription required")
    dogs = data["dogs"]
    ids = [dog["id"] for dog in dogs]
    if not dogs or len(set(ids)) != len(ids):
        raise ValueError("Dog identifiers must be nonempty and distinct")
    if any(not isinstance(value, str) or not value.strip() for value in ids):
        raise ValueError("Missing dog identifier")
    baseline = data["baseline_trials_per_dog"]
    conditions = data["conditions_per_harness"]
    if type(baseline) is not int or baseline < 0:
        raise ValueError("Invalid baseline count")
    if conditions != ["harness_without_leash", "harness_with_leash"]:
        raise ValueError("This recount only models the two published harness conditions")
    coverage = Counter()
    for dog in dogs:
        harnesses = dog["harnesses"]
        if not harnesses or len(set(harnesses)) != len(harnesses):
            raise ValueError("Duplicate or missing dog-harness combination")
        if any(not isinstance(value, str) or not value.strip() for value in harnesses):
            raise ValueError("Missing harness identifier")
        coverage.update(harnesses)
    combinations = sum(coverage.values())
    trials = len(dogs) * baseline + len(conditions) * combinations
    if trials != data["reported_total_trials"] or len(dogs) != data["reported_distinct_dogs"]:
        raise ValueError("Recount disagrees with the transcribed reported totals")
    return {
        "source_id": data["source_id"],
        "distinct_dogs": len(dogs),
        "dog_harness_combinations": combinations,
        "baseline_trials": len(dogs) * baseline,
        "harness_condition_trials": len(conditions) * combinations,
        "total_trials": trials,
        "distinct_dogs_per_harness": dict(sorted(coverage.items())),
        "scope": "Design-count arithmetic only; no experiment rerun or raw gait reanalysis",
    }


if __name__ == "__main__":
    data = json.loads(Path(__file__).with_name("study-input.json").read_text(encoding="utf-8"))
    print(json.dumps(recount(data), ensure_ascii=True, indent=2))
