#!/usr/bin/env python3
"""Read-only decisions. No agents, task transitions or project cutovers."""
import argparse
import json
import sys
from pathlib import Path
sys.path.insert(0,str(Path(__file__).resolve().parents[1]/'src'))
from arb_preflight import check_plan,compare_plans,seed_preflight,recovery_plan


def pairs(items):
    result={}
    for k,v in items:
        if k in result:raise ValueError('duplicate input key')
        result[k]=v
    return result


def main():
    ap=argparse.ArgumentParser(description=__doc__)
    ap.add_argument('action',choices=['checks','tt','seed','recovery'])
    ap.add_argument('input',type=Path)
    args=ap.parse_args()
    try:
        if any(p.is_symlink() for p in [args.input,*args.input.parents]):raise ValueError('symlink input refused')
        data=json.loads(args.input.read_text(),object_pairs_hook=pairs)
        if not isinstance(data,dict):raise ValueError('input must be object')
        funcs={'checks':check_plan,'tt':compare_plans,'seed':seed_preflight,'recovery':recovery_plan}
        result=funcs[args.action](**data)
        print(json.dumps(result,ensure_ascii=False,sort_keys=True,indent=2,allow_nan=False))
        return 0
    except (OSError,ValueError,TypeError,KeyError) as error:
        print(f'arb-preflight: ERROR: {error}; no writes, fix explicit input and retry',file=sys.stderr)
        return 2


if __name__=='__main__':raise SystemExit(main())
