"""Local YAML/selector checks only; NOT Kubernetes schema/admission validation."""
import math
from pathlib import Path
import yaml


def load(name):
    return list(yaml.safe_load_all(Path(name).read_text()))


def selector_error(dep):
    want = dep["spec"]["selector"]["matchLabels"]
    got = dep["spec"]["template"]["metadata"]["labels"]
    return any(got.get(k) != v for k, v in want.items())


def main():
    docs = load("app.yaml")
    dep = next(x for x in docs if x["kind"] == "Deployment")
    svc = next(x for x in docs if x["kind"] == "Service")
    assert not selector_error(dep)
    labels = dep["spec"]["template"]["metadata"]["labels"]
    assert all(labels.get(k) == v for k, v in svc["spec"]["selector"].items())
    assert selector_error(load("selector-bad.yaml")[0])
    print(f"YAML parsed: {len(docs)} objects; selectors: matched")
    print("negative fixture: selector mismatch detected")
    # Explicit teaching inputs, not readings from a cluster.
    desired = math.ceil(3 * 140 / 70)
    slots = (2000 - 500) // 500
    assert desired == 6 and slots == 3
    print(f"HPA idealized target: {desired}; free CPU-request slots: {slots}")
    for n in (1, 3, 4):
        print(f"replicas={n}: 25% surge={math.ceil(n*.25)} unavailable={math.floor(n*.25)}")
    c = dep["spec"]["template"]["spec"]["containers"][0]
    assert c["image"] == "REPLACE_WITH_VERIFIED_IMAGE_DIGEST"
    print("deployment blocked: image placeholder must be replaced")

if __name__ == "__main__":
    main()
