from pathlib import Path

root = Path(__file__).resolve().parents[2]
checks = {
    "factory": (root / "MASSystem/Application/Facade/MASApplicationWindowControls.ControlFactory.Data.vb", "Public Function AddDataForm(Optional configure As Action(Of MASFormBuilder) = Nothing"),
    "create": (root / "Component/Inputs/DataForm/MASDataForm.vb", "Public Shared Function Create(Optional configure As Action(Of MASFormBuilder) = Nothing) As MASDataForm"),
    "event": (root / "Component/Inputs/DataForm/MASDataForm.vb", "Public Event FieldsChanged As EventHandler"),
    "set fields": (root / "Component/Inputs/DataForm/MASDataForm.vb", "Public Function SetFields(builder As MASFormBuilder) As MASDataForm"),
    "direct add": (root / "Component/Inputs/DataForm/MASDataForm.vb", "Public Function AddField(label As String"),
    "safe label read": (root / "Component/Inputs/DataForm/MASDataForm.vb", "If index < 0 OrElse index >= _fields.Count Then Return String.Empty"),
    "builder add text": (root / "Component/Inputs/DataForm/MASFormBuilder.vb", "Public Function AddText(label As String"),
    "builder toggle formatting": (root / "Component/Inputs/DataForm/MASFormBuilderFieldPolicy.vb", 'Return If(checked, "On", "Off")'),
    "builder null apply": (root / "Component/Inputs/DataForm/MASFormBuilder.vb", "If form Is Nothing Then Throw New ArgumentNullException(NameOf(form))"),
    "max fields": (root / "Component/Tokens/Component/DataFormTokens.vb", "Friend Const MaxFields As Integer = 80"),
    "default title": (root / "Component/Tokens/Component/DataFormTokens.vb", 'Friend Const DefaultTitle As String = "Data form"'),
    "empty text": (root / "Component/Tokens/Component/DataFormTokens.vb", 'Friend Const EmptyText As String = "No form fields"'),
    "preferred width": (root / "Component/Tokens/Component/DataFormTokens.vb", "Friend Const PreferredWidthDip As Single = 720.0F"),
    "compact row": (root / "Component/Tokens/Component/DataFormTokens.vb", "Friend Const DenseRowHeightDip As Single = 40.0F"),
    "label length": (root / "Component/Inputs/DataForm/MASFormBuilderFieldPolicy.vb", "Friend Const MaxLabelLength As Integer = 80"),
    "value length": (root / "Component/Inputs/DataForm/MASFormBuilderFieldPolicy.vb", "Friend Const MaxValueLength As Integer = 160"),
    "helper length": (root / "Component/Inputs/DataForm/MASFormBuilderFieldPolicy.vb", "Friend Const MaxHelperLength As Integer = 180"),
    "truncation": (root / "Component/Inputs/DataForm/MASFormBuilderFieldPolicy.vb", "text = text.Substring(0, maxLength)"),
    "undefined kind fallback": (root / "Component/Inputs/DataForm/MASFormBuilderFieldPolicy.vb", "Return MASDataFormFieldKind.Custom"),
    "undefined state fallback": (root / "Component/Inputs/DataForm/MASFormBuilderFieldPolicy.vb", "safeState = MASDataFormFieldState.Normal"),
    "toggle empty placeholder": (root / "Component/Inputs/DataForm/MASFormBuilderFieldPolicy.vb", 'Return "Off"'),
    "selection empty placeholder": (root / "Component/Inputs/DataForm/MASFormBuilderFieldPolicy.vb", 'Return "Not selected"'),
    "issues warning error": (root / "Component/Inputs/DataForm/MASFormBuilderFieldPolicy.vb", "state = MASDataFormFieldState.Warning OrElse state = MASDataFormFieldState.[Error]"),
    "summary": (root / "Component/Inputs/DataForm/MASDataForm.Helpers.vb", '"{0} fields · {1} required · {2} issues"'),
    "keyboard page": (root / "Component/Inputs/DataForm/MASDataForm.Interaction.vb", "Case Keys.PageUp"),
    "keyboard escape": (root / "Component/Inputs/DataForm/MASDataForm.Interaction.vb", "Case Keys.Escape"),
    "rtl": (root / "Component/Inputs/DataForm/MASDataForm.Helpers.vb", "MASLocalization.IsCurrentRightToLeft()"),
    "advanced data form": (root / "docs/reference/api/all-public-types-index.md", "`MASDataForm` | Class | Advanced | —"),
    "advanced builder": (root / "docs/reference/api/all-public-types-index.md", "`MASFormBuilder` | Class | Advanced | —"),
    "documentation": (root / "docs/reference/controls/data-form-and-form-builder.md", "# Data Form and Form Builder"),
    "reference link": (root / "docs/reference-guide.md", "reference/controls/data-form-and-form-builder.md"),
    "user link": (root / "docs/user/controls.md", "../reference/controls/data-form-and-form-builder.md"),
}
failed = []
for name, (path, needle) in checks.items():
    text = path.read_text(encoding="utf-8-sig")
    if needle not in text:
        failed.append(f"{name}: {path} missing {needle!r}")
if failed:
    print("Assertions failed:")
    print("\n".join(failed))
    raise SystemExit(1)
print(f"Assertions: {len(checks)} passed, 0 failed")
