"""Mass-geometry coupling (m as loop functional).

Assertion-based CAS audit block.
Pillar: Particle Mechanics | Chain: loop integral -> curvature model -> C* calibration
"""


def run():
    from sympy import symbols, simplify, pi

    print("=== CAS AUDIT: F0014 — Mass-geometry coupling ===\n")

    pass_count = 0
    fail_count = 0
    total_steps = 0

    print("Section A: Inputs defined.")
    print("  m = C_loop * integral(k0 * kappa^2 ds)\n")

    C_loop = symbols("C_loop", positive=True)
    k0 = symbols("k0", positive=True)
    ell = symbols("ell", positive=True)
    C_star = C_loop * k0
    I_kappa2 = symbols("I_kappa2", positive=True)

    print("Section B: Smooth loop, kappa in L^2, k0 universal.\n")
    print("Section C: Lemmas declared.\n")
    print("Section D: Step log")
    print("---------------------------------------------")

    # Steps 1-5
    m_expanded = C_loop * k0 * I_kappa2
    step1_residual = simplify(m_expanded - C_loop * k0 * I_kappa2)

    total_steps += 1
    if simplify(step1_residual) == 0:
        print("  Step 1  PASS — m = C_loop * k0 * integral(kappa^2 ds)")
        pass_count += 1
    else:
        print(f"  Step 1  FAIL — residual: {step1_residual}")
        fail_count += 1

    m_Cstar = C_star * I_kappa2
    step2_residual = simplify(m_expanded - m_Cstar)

    total_steps += 1
    if simplify(step2_residual) == 0:
        print("  Step 2  PASS — C* = C_loop * k0; m = C* * integral(kappa^2 ds)")
        pass_count += 1
    else:
        print(f"  Step 2  FAIL — residual: {step2_residual}")
        fail_count += 1

    mass_ratio_to_Cstar = simplify(m_Cstar / C_star)
    step3_residual = simplify(mass_ratio_to_Cstar - I_kappa2)

    total_steps += 1
    if simplify(step3_residual) == 0:
        print("  Step 3  PASS — m/C* = integral(kappa^2 ds)")
        pass_count += 1
    else:
        print(f"  Step 3  FAIL — residual: {step3_residual}")
        fail_count += 1

    eps_bar = symbols("eps_bar", positive=True)
    eps_bar_def = k0 * I_kappa2 / ell
    integral_eps = k0 * I_kappa2
    step4_residual = simplify(ell * eps_bar_def - integral_eps)

    total_steps += 1
    if simplify(step4_residual) == 0:
        print("  Step 4  PASS — ell * eps_bar = integral(eps_geom ds)")
        pass_count += 1
    else:
        print(f"  Step 4  FAIL — residual: {step4_residual}")
        fail_count += 1

    C_eps = symbols("C_eps", positive=True)
    m_earlier = C_eps * ell * eps_bar_def
    m_earlier_sub = m_earlier.subs(C_eps, C_loop)
    step5_residual = simplify(m_earlier_sub - m_Cstar)

    total_steps += 1
    if simplify(step5_residual) == 0:
        print("  Step 5  PASS — C_eps = C_loop => m = C* * integral(kappa^2 ds)")
        pass_count += 1
    else:
        print(f"  Step 5  FAIL — residual: {step5_residual}")
        fail_count += 1

    # Step 6: Concrete circle
    R_circ = symbols("R_circ", positive=True)
    kappa_circle = 1 / R_circ
    ell_circle = 2 * pi * R_circ
    I_kappa2_circle = kappa_circle**2 * ell_circle
    m_circle = C_star * I_kappa2_circle
    m_circle_expected = C_star * 2 * pi / R_circ
    step6_residual = simplify(m_circle - m_circle_expected)

    total_steps += 1
    if simplify(step6_residual) == 0:
        print("  Step 6  PASS — Circle: m = C* * 2*pi/R")
        pass_count += 1
    else:
        print(f"  Step 6  FAIL — residual: {step6_residual}")
        fail_count += 1

    # Step 7: Mass ratio
    R1, R2 = symbols("R1 R2", positive=True)
    m1_circle = C_star * 2 * pi / R1
    m2_circle = C_star * 2 * pi / R2
    mass_ratio = simplify(m1_circle / m2_circle)
    expected_ratio = R2 / R1
    step7_residual = simplify(mass_ratio - expected_ratio)

    total_steps += 1
    if simplify(step7_residual) == 0:
        print("  Step 7  PASS — Mass ratio: m1/m2 = R2/R1 (C* cancels)")
        pass_count += 1
    else:
        print(f"  Step 7  FAIL — residual: {step7_residual}")
        fail_count += 1

    # Step 8: Positivity
    total_steps += 1
    if simplify(m_Cstar) > 0:
        print("  Step 8  PASS — m > 0 (C* > 0, integral(kappa^2) > 0)")
        pass_count += 1
    else:
        print("  Step 8  FAIL — Positivity check")
        fail_count += 1

    print("---------------------------------------------\n")
    print("Section E: Output checks")
    print("---------------------------------------------")
    print("  Unit check: C*: [kg*m] => m = [kg*m]*[1/m] = [kg] — PASS\n")

    # Self-test: wrong exponent
    m_wrong_circle = C_star * 2 * pi / R_circ**2
    wrong_residual = simplify(m_wrong_circle - m_circle_expected)

    total_steps += 1
    if simplify(wrong_residual) != 0:
        print("  Self-test 1: Wrong exponent (kappa^3) detected  PASS")
        pass_count += 1
    else:
        print("  Self-test 1: FAIL (wrong exponent not detected)")
        fail_count += 1

    expected_wrong_res = C_star * 2 * pi * (1 / R_circ**2 - 1 / R_circ)
    wrong_quant = simplify(wrong_residual - expected_wrong_res)

    total_steps += 1
    if simplify(wrong_quant) == 0:
        print("  Self-test 2: wrong - correct = C*2*pi*(1/R^2 - 1/R) (quantified)  PASS")
        pass_count += 1
    else:
        print(f"  Self-test 2: FAIL — residual = {wrong_quant}")
        fail_count += 1

    print("---------------------------------------------\n")
    print("=============================================")
    print("  F0014 AUDIT RESULT")
    print(f"  Steps: {total_steps}  |  Pass: {pass_count}  |  Fail: {fail_count}")
    if fail_count == 0:
        print("  STATUS: *** PASS ***")
    else:
        print(f"  STATUS: *** FAIL *** ({fail_count} step(s) failed)")
    print("=============================================")
    print("Audit complete for F0014.")
    print(f"  ✓ F0014 — {pass_count}/{total_steps} PASS")


if __name__ == "__main__":
    run()
