from pathlib import Path


ROOT = Path(__file__).resolve().parents[1]
FILES = {
    "AgrarianTypes.h": ROOT / "Source" / "AgrarianGame" / "AgrarianTypes.h",
    "AgrarianInventoryComponent.cpp": ROOT / "Source" / "AgrarianGame" / "AgrarianInventoryComponent.cpp",
    "AgrarianGameCharacter.h": ROOT / "Source" / "AgrarianGame" / "AgrarianGameCharacter.h",
    "AgrarianGameCharacter.cpp": ROOT / "Source" / "AgrarianGame" / "AgrarianGameCharacter.cpp",
    "AgrarianDebugHUD.cpp": ROOT / "Source" / "AgrarianGame" / "AgrarianDebugHUD.cpp",
    "InventoryDataModel.md": ROOT / "Docs" / "InventoryDataModel.md",
    "TechnicalDesignDocument.md": ROOT / "Docs" / "TechnicalDesignDocument.md",
    "AGRARIAN_DEVELOPMENT_ROADMAP.md": ROOT / "AGRARIAN_DEVELOPMENT_ROADMAP.md",
}

EXPECTED = {
    "AgrarianTypes.h": [
        "UnitWeight",
    ],
    "AgrarianInventoryComponent.cpp": [
        "UAgrarianInventoryComponent::GetTotalWeight",
        "Stack.UnitWeight",
        "Stack.Quantity",
    ],
    "AgrarianGameCharacter.h": [
        "ComfortableCarryWeight = 25.0f",
        "HeavyCarryWeight = 60.0f",
        "CalculateCarryWeightMovementMultiplier",
        "GetCurrentCarryWeight",
    ],
    "AgrarianGameCharacter.cpp": [
        "AAgrarianGameCharacter::GetCurrentCarryWeight",
        "InventoryComponent->GetTotalWeight()",
        "CalculateCarryWeightMovementMultiplier()",
        "AAgrarianGameCharacter::CalculateCarryWeightMovementMultiplier",
        "StrengthMultiplier",
        "FVector2D(1.0f, 0.65f)",
        "return 0.45f",
    ],
    "AgrarianDebugHUD.cpp": [
        "GetCurrentCarryWeight()",
    ],
    "InventoryDataModel.md": [
        "## Carry Capacity Placeholder",
        "weight-first",
        "movement penalty",
        "`UnitWeight`",
        "`GetTotalWeight`",
        "`GetCurrentCarryWeight`",
        "`25.0`",
        "`60.0`",
        "`StrengthMultiplier`",
        "`45%` carry multiplier",
        "parallel inventory burden model",
    ],
    "TechnicalDesignDocument.md": [
        "Carry capacity is active as an MVP placeholder",
        "stack `UnitWeight`",
        "inventory `GetTotalWeight`",
        "`25.0` comfort and `60.0` heavy",
        "debug",
        "HUD",
    ],
    "AGRARIAN_DEVELOPMENT_ROADMAP.md": [
        "[x] Add weight or carry capacity placeholder.",
        "stack `UnitWeight`",
        "inventory `GetTotalWeight`",
        "strength-scaled movement penalties",
    ],
}


def main():
    missing = []
    for label, path in FILES.items():
        text = path.read_text(encoding="utf-8")
        for snippet in EXPECTED[label]:
            if snippet not in text:
                missing.append(f"{label}: {snippet}")

    if missing:
        raise RuntimeError("Carry capacity placeholder verification failed: " + "; ".join(missing))

    print("Agrarian carry capacity placeholder verification complete.")


if __name__ == "__main__":
    main()
