"""Export direct filter rim/axis reference wires in the survey frame only."""
import argparse
import json
from pathlib import Path

import cadquery as cq
from filter_rim_survey import analyze


def build_reference(report):
    if report.get('status')!='within_entered_comparison_limit':
        raise ValueError('Review failed survey comparisons before exporting reference geometry.')
    center=cq.Vector(*report['derived_rim_center_xyz_mm'])
    axis=cq.Vector(*report['derived_axis_toward_closed_end_unit_vector'])
    circle=cq.Wire.makeCircle(report['derived_rim_radius_mm'],center,axis)
    line=cq.Edge.makeLine(center,cq.Vector(*report['derived_closed_end_plane_axis_intersection_xyz_mm']))
    return cq.Compound.makeCompound([circle,line])


def main():
    parser=argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--survey',type=Path,required=True)
    parser.add_argument('--output-dir',type=Path,required=True)
    parser.add_argument('--comparison-limit-mm',type=float,required=True)
    args=parser.parse_args()
    if args.output_dir.exists() and any(args.output_dir.iterdir()):
        parser.error('Choose an empty output directory so a failed survey cannot leave an earlier STEP beside a new report.')
    report=analyze(args.survey,args.comparison_limit_mm)
    args.output_dir.mkdir(parents=True,exist_ok=True)
    (args.output_dir/'filter-rim-axis-report.json').write_text(json.dumps(report,indent=2,allow_nan=False)+'\n')
    if report['status']!='within_entered_comparison_limit':
        print('Outside the entered comparison limit. Wrote residual report only; no reference STEP exported.')
        raise SystemExit(1)
    cq.exporters.export(build_reference(report),str(args.output_dir/'filter-rim-axis-reference.step'))
    print('Wrote rim circle/axis reference and evidence report. No material solid or engine registration.')


if __name__=='__main__':
    main()
