#!/usr/bin/env python3
"""Harm pricing for the 42-plaza shadow-software toll scam.
Anchor: STF Rs 45,000/day at Atraila Shiv Gulam (Delhi HC judgment 2026-07-03, para 5).
Model 1 fee-scales matched plaza car-fees (Rajmargyatra DB); Model 2 assumes uniform Atraila intensity across all 42 plazas."""
import csv, io, statistics as st, subprocess
ANCHOR, AFEE, U = 45_000.0, 115.0, 23
IDS = "594,595,596,811,827,675,487,471,292,333,934,527,974,543,513,1020,532,657,614"
rows = list(csv.DictReader(open("rmy-scam-crosswalk-2026-09-06.csv")))
out = subprocess.run(["duckdb", "/home/workspace/Projects/rajmargyatra/rajmargyatra.duckdb", "-csv", "-c",
    f"SELECT tollplaza_id, CarRate_single FROM plazas WHERE tollplaza_id IN ({IDS})"], capture_output=True, text=True)
fees = {int(r["tollplaza_id"]): float(r["CarRate_single"]) for r in csv.DictReader(io.StringIO(out.stdout)) if r["CarRate_single"]}
mrel = [fees[i] / AFEE for i in fees]
umed = st.median(mrel)
print(f"{len(mrel)} fee-matched plazas (fee ratio vs Atraila Rs{AFEE:.0f}): median {umed:.2f}, range {min(mrel):.2f}-{max(mrel):.2f}\n")
def m1(f, d): return (ANCHOR * sum(r * f * d for r in mrel) + ANCHOR * umed * U * f * d) / 1e7
def m2(f, d): return ANCHOR * 42 * f * d / 1e7
for lbl, f, d in [("Conservative", 0.25, 365), ("Central", 0.5, 548), ("Aggressive", 1.0, 730)]:
    print(f"{lbl:13s} Model1 Rs{m1(f, d):7.1f} cr   Model2 Rs{m2(f, d):7.1f} cr")
print(f"\nAtraila itself (measured, 730d): Rs {ANCHOR*730/1e7:.2f} cr")
print("STF network claim: Rs 120 cr ->", round(120e7/42/ANCHOR, 0), "days at full Atraila intensity")

# --- Network scaling scenarios (ED: "about 100 plazas"; stress test: 200) ---
# Plazas beyond the 42 identified: fee ratio assumed at network median (0.696 vs Atraila, n=1061)
NET_MED_REL = 0.696
# Scaling scenarios: 100 = ED claim, 200 = stress test (18% of NHAI network).
# Plazas beyond the identified 42 use network-wide median fee ratio.
out2 = subprocess.run(["duckdb", "/home/workspace/Projects/rajmargyatra/rajmargyatra.duckdb", "-csv", "-c",
    "SELECT ROUND(MEDIAN(TRY_CAST(CarRate_single AS DOUBLE))/115.0,3) FROM plazas WHERE TRY_CAST(CarRate_single AS DOUBLE) > 0"],
    capture_output=True, text=True)
net_rel = float(out2.stdout.strip().split("\n")[-1])
def m1s(N, f, d):
    known = ANCHOR * sum(r * f * d for r in mrel) + ANCHOR * umed * U * f * d
    extra = ANCHOR * net_rel * (N - 42) * f * d
    return (known + extra) / 1e7
def m2s(N, f, d): return ANCHOR * N * f * d / 1e7
for N in (100, 200):
    print(f"\n--- N = {N} plazas (network median rel {net_rel}) ---")
    for lbl, f, d in [("Conservative", 0.25, 365), ("Central", 0.5, 548), ("Aggressive", 1.0, 730)]:
        print(f"{lbl:13s} Model1 Rs{m1s(N, f, d):7.1f} cr   Model2 Rs{m2s(N, f, d):7.1f} cr")
