#!/usr/bin/env python3
# Fixtures for phase-00-maas-recidr.sh: pre-migration (d052), migrated (done), wrong-vid.
import json, os
FIX = os.path.join(os.path.dirname(os.path.abspath(__file__)), "fix"); os.makedirs(FIX, exist_ok=True)
def sub(cidr, sid, space, vid, fab): return {"cidr": cidr, "id": sid, "space": space, "vlan": {"vid": vid, "fabric_id": fab}}
def vlan(vid, vid_id, fab): return {"vid": vid, "id": vid_id, "fabric_id": fab}
def ipr(start, end, sid, rid): return {"id": rid, "type": "reserved", "start_ip": start, "end_ip": end, "subnet": {"id": sid}}
def dump(scn, subs, vlans, ipranges, ipaddrs):
    for nm, obj in (("subnets", subs), ("vlans", vlans), ("ipranges", ipranges), ("ipaddrs", ipaddrs)):
        open(os.path.join(FIX, f"{scn}_{nm}.json"), "w").write(json.dumps(obj, indent=2) + "\n")

# vlans common to a metal(2)/data(3)/provider(0)/storage(9)/replication(5) layout
def vlans_pre():
    return [vlan(0,10,0), vlan(0,20,2), vlan(103,21,2), vlan(0,30,3), vlan(0,90,9), vlan(0,50,5)]

# d052 (pre-migration): the three movers at their OLD cidrs, correct space+vid
d052_subs = [
    sub("10.12.4.0/22", 1, "provider-public", 0, 0),
    sub("10.12.8.0/22", 2, "metal-admin", 0, 2),
    sub("10.12.12.0/22", 3, "metal-internal", 103, 2),
    sub("10.12.16.0/22", 4, "data-tenant", 0, 3),
    sub("10.12.32.0/22", 6, "storage", 0, 9),
    sub("10.12.36.0/22", 7, "replication", 0, 5),
]
d052_ipr = [ipr("10.12.8.2","10.12.8.100",2,100), ipr("10.12.12.2","10.12.12.100",3,101)]  # ranges on metal-admin + metal-internal old subnets
dump("d052", d052_subs, vlans_pre(), d052_ipr, [])

# done (migrated D-058): old cidrs now host different planes
done_subs = [
    sub("10.12.4.0/22", 1, "provider-public", 0, 0),
    sub("10.12.8.0/22", 2, "provider-vip", 104, 0),
    sub("10.12.12.0/22", 3, "metal-admin", 0, 2),
    sub("10.12.16.0/22", 4, "metal-internal", 103, 2),
    sub("10.12.20.0/22", 5, "data-tenant", 0, 3),
    sub("10.12.32.0/22", 6, "storage", 0, 9),
    sub("10.12.36.0/22", 7, "replication", 0, 5),
]
done_vlans = [vlan(0,10,0), vlan(104,11,0), vlan(0,20,2), vlan(103,21,2), vlan(0,30,3), vlan(0,90,9), vlan(0,50,5)]
dump("done", done_subs, done_vlans, [], [])

# wrongvid: metal-internal at old .12 is space metal-internal but VID 99 (not 103)
wv_subs = [s for s in d052_subs if s["cidr"] != "10.12.12.0/22"] + [sub("10.12.12.0/22", 3, "metal-internal", 99, 2)]
dump("wrongvid", wv_subs, vlans_pre(), d052_ipr, [])
print("fixtures written")
