import time
import socket
import os
import argparse
from pathlib import Path
import json

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument('--root', type=str, default='results')
    parser.add_argument('--save_root', type=str, default='exp1')
    parser.add_argument('--plot_live', type=bool, default=False)
    parser.add_argument('--freq', type=float, default=0.1, help='Access data for every x sec.')
    args = parser.parse_args()
    return args

def NMEAtoDecimal(latitude, longitude, West=1, South=0):
    temp_lat = int(latitude / 100)
    newlat = temp_lat + (latitude - 100 * temp_lat) / 60
    temp_long = int(longitude / 100)
    newlong = temp_long + (longitude - 100 * temp_long) / 60
    if West:
        newlong = newlong * (-1)
    if South:
        newlat = newlat * (-1)
    return newlat, newlong

def livePlotMap_main(args):
    exp_fd = os.path.join(args.root, args.save_root)
    Path(exp_fd).mkdir(parents=True, exist_ok=True)

    with open(os.path.join(exp_fd, 'args.txt'), 'w') as f:
        json.dump(args.__dict__, f, indent=2)

    tcp_socket = socket.create_connection(('169.254.1.0', 5017))

    data_list = []
    raw_txt = open(os.path.join(exp_fd, 'rawGPSdata.txt'), 'w')

    try:
        while True:
            data = tcp_socket.recv(1024)
            data_list.append(data)
            raw_txt.write(str(data))
            raw_txt.write('\n')
            temp = str(data).split(",")
            latitude = float(temp[2])
            longitude = float(temp[4])
            newlat, newlong = NMEAtoDecimal(latitude, longitude, West=1, South=0)
            p = [newlat, newlong]
            time.sleep(0.1 * args.freq)
    except KeyboardInterrupt:
        print('Stop Recording...')
        raw_txt.close()

if __name__ == '__main__':
    args = parse_args()
    if args.plot_live:
        print('Start ploting live...')
        livePlotMap_main(args)
    print('End of the code.')