#!/usr/bin/env python3
"""
dump_full_records.py
=====================
For a given pair of call signs, dumps:
  - every PA.dat row for either call sign (all 24 fields, enumerated)
  - the full AN.dat row(s) for the specific (call_sign, location_number,
    antenna_number) referenced by those PA rows (all fields, enumerated)

Usage:
    python dump_full_records.py WQVT999 WQVT998
"""
import io
import sys
import zipfile

CS_A, CS_B = sys.argv[1], sys.argv[2]
targets = {CS_A, CS_B}

referenced = []  # (call_sign, location_number, antenna_number, role)

with zipfile.ZipFile("l_micro.zip") as z:
    print("=== PA.dat rows ===")
    with z.open("PA.dat") as raw:
        for line in io.TextIOWrapper(raw, encoding="latin-1"):
            fields = line.rstrip("\n").split("|")
            cs = fields[4].strip() if len(fields) > 4 else ""
            rx_cs = fields[16].strip() if len(fields) > 16 else ""
            if cs in targets or rx_cs in targets:
                print(f"  PA row: call_sign={cs!r} receive_call_sign={rx_cs!r} ({len(fields)} fields)")
                for idx, val in enumerate(fields, 1):
                    if val.strip():
                        print(f"    [{idx}] {val!r}")
                tx_loc = fields[7].strip()
                tx_ant = fields[8].strip()
                rx_loc = fields[9].strip()
                rx_ant = fields[10].strip()
                referenced.append((cs, tx_loc, tx_ant, "tx"))
                referenced.append((rx_cs, rx_loc, rx_ant, "rx"))
                print()

    print("=== Referenced AN.dat rows ===")
    want = {(cs, loc, ant) for cs, loc, ant, role in referenced}
    print(f"  looking for: {want}")
    with z.open("AN.dat") as raw:
        for line in io.TextIOWrapper(raw, encoding="latin-1"):
            fields = line.rstrip("\n").split("|")
            cs = fields[4].strip() if len(fields) > 4 else ""
            loc = fields[7].strip() if len(fields) > 7 else ""
            ant = fields[6].strip() if len(fields) > 6 else ""
            if (cs, loc, ant) in want:
                print(f"  AN row: call_sign={cs!r} location={loc!r} antenna={ant!r} ({len(fields)} fields)")
                for idx, val in enumerate(fields, 1):
                    if val.strip():
                        print(f"    [{idx}] {val!r}")
                print()

    # Also dump ALL AN.dat rows for these call signs (not just referenced),
    # to see what IS available
    print("=== ALL AN.dat rows for these call signs ===")
    with z.open("AN.dat") as raw:
        for line in io.TextIOWrapper(raw, encoding="latin-1"):
            fields = line.rstrip("\n").split("|")
            cs = fields[4].strip() if len(fields) > 4 else ""
            if cs in targets:
                loc = fields[7].strip() if len(fields) > 7 else ""
                ant = fields[6].strip() if len(fields) > 6 else ""
                h = fields[11].strip() if len(fields) > 11 else ""
                print(f"  {cs}: location={loc} antenna={ant} height_field12={h!r}")
