#!/usr/bin/python

# labels_to_gps_file.py
#       --copyright--                   Copyright 2019 (C) Tranzoa, Co. All rights reserved.    Warranty: You're free and on your own here. This code is not necessarily up-to-date or of public quality.
#       --url--                         http://www.tranzoa.net/tzpython/
#       --email--                       pycode is the name to send to. tranzoa.com is the place to send to.
#       --bodstamps--
#       March 30, 2019          bar
#       April 11, 2020          bar     nicer failure printout
#       --eodstamps--
##      \file
#       \namespace              tzpython.labels_to_gps_file
#
#
#       Put all command line labels in a GPS (GPX/KMZ/KML) file.
#
#

import  os
import  sys

import  latlon
import  tz_gps
import  tzlib


help_str        = """
%s  (options) lat_lon gps_file(s)...

Options:

    --label         latlon      label   Know this named label for a point.
    --label_near    latlon NMI  label   Know this named label for a circle.

Put all the given labels in a GPX/KMZ/KML GPS file.

"""


#
#
#   Main program
#
#
if  __name__ == '__main__' :
    import  TZCommandLineAtFile

    program_name    = sys.argv.pop(0)
    TZCommandLineAtFile.expand_at_sign_command_line_files(sys.argv)


    labels          = {}


    while True :
        oi  = tzlib.array_find(sys.argv, [ "--help", "-h", "-?", "/h", "/H", "/?" ] )
        if  oi < 0 :    break
        del sys.argv[oi]
        print help_str % ( program_name, )
        sys.exit(254)


    while True :
        oi  = tzlib.array_find(sys.argv, [ "--label" ] )
        if  oi < 0 :    break
        del sys.argv[oi]
        s                       = sys.argv.pop(oi)
        ( lat, lon )            = latlon.parse_lat_lon(s)
        if  (lat == None) or (lon == None) :
            print "I cannot understand label of %s" % s
            sys.exit(103)
        p                       = tz_gps.a_rectangle(lat, lon)
        s                       = sys.argv.pop(oi)
        ( lat, lon )            = latlon.parse_lat_lon(s)
        if  (lat == None) or (lon == None) :
            print "I cannot understand label lat/lon of %s" % s
            sys.exit(103)
        p.include_latlon(lat, lon)
        p.name                  = sys.argv.pop(oi).strip()
        labels[p.name.lower()]  = p

    while True :
        oi  = tzlib.array_find(sys.argv, [ "--label_near", "-l" ] )
        if  oi < 0 :    break
        del sys.argv[oi]
        s                       = sys.argv.pop(oi)
        ( lat, lon )            = latlon.parse_lat_lon(s)
        if  (lat == None) or (lon == None) :
            print "I cannot understand label_near of %s" % s
            sys.exit(103)
        p                       = tz_gps.a_circle(lat, lon, float(sys.argv.pop(oi)))
        p.name                  = sys.argv.pop(oi).strip()
        labels[p.name.lower()]  = p
        # print "@@@@", p.name, len(sys.argv), sys.argv[-2], sys.argv[-1]


    if  len(sys.argv) != 1 :
        print "Please tell me an ouput .gpx/.kmz/.nmea file! %u:%s" % ( len(sys.argv), sys.argv, )
        sys.exit(101)

    waypoints   = [ tz_gps.a_point(lp.name, lat = lp.lat, lon = lp.lon) for lp in labels.values() ]

    ofile_name  = sys.argv.pop(0)
    tz_gps.write_gps_file(ofile_name, os.path.basename(program_name), os.path.basename(program_name), waypoints)


#
#
# eof
