#!/usr/bin/env python3

import numpy as np
import matplotlib.pyplot as plt
import argparse, sys, math

parser = argparse.ArgumentParser()
#parser.add_argument('-x', '--xcolumn', help="Column to use as X-axis", type=int, required=True)
#parser.add_argument('-c', '--column', help="Column to use as Y-axis", type=int, action='append', required=True)
#parser.add_argument('--skip', help="Skip header lines", type=int)
#parser.add_argument('-o', '--outfile', help="output file to save plot as")
#parser.add_argument('--label', help="Label for legend", action='append')
#parser.add_argument('--xticks', help="Override X labels. Must equal number X values", action='append')
#parser.add_argument('--dpi', help="Resolution to save output as", type=int, default=300)
#parser.add_argument('-t', '--title')


parser.add_argument('-rate', '--rate', help="Plot Rate", action="store_true")
parser.add_argument('-U', '--U', help="Plot U", action="store_true")
parser.add_argument('-V', '--V', help="Plot V", action="store_true")
parser.add_argument('-W', '--W', help="Plot W", action="store_true")
parser.add_argument('-uv', '--uv', help="Plot UV", action="store_true")
parser.add_argument('-abs', '--abs', help="Plot Absolute Values", action="store_true")
parser.add_argument('-f', '-freq', '--freq', help="Observing Frequency (MHz)", type=float)
parser.add_argument('-r', '-refant', '--refant', help="Reference antenna")
parser.add_argument('files', nargs=2)

args = parser.parse_args()

c = 1
scale = 1
ylabel = 'Delay (usec)'

#scale = 1000
#ylabel = 'Delay (nsec)'

if args.freq is not None:
    scale *= args.freq*1e6*360/1e6
    ylabel = 'Phase (deg)'

if args.rate:
    c = 2
    if args.freq is not None:
        ylabel = 'Fringe Rate (Deg/sec)'
    else:
        ylabel= 'Delay Rate (psec/sec)'
        scale = 1e6

if args.uv:
    subRef = True

subRef = False
    
if args.U:
    scale = 1
    c = 3
    ylabel= 'U (m)'
    subRef = True

if args.V:
    scale = 1
    c = 4
    ylabel= 'V (m)'
    subRef = True

if args.W:
    scale = 1
    c = 5
    ylabel= 'W (m)'
    subRef = True

if subRef and args.refant is None:
    print("Error: Must pass reference Antenna")
    sys.exit(1)

if args.refant is not None:
    subRef = True

refAnt = args.refant
    
def readCalc(file):

    calc = {}

    data=np.genfromtxt(file, dtype=(float,'S4',float,float,float,float,float), comments='#', usecols=(0,2,4,5,6,7,8))
    

    for d in data:
        ant = str(d[1],'utf-8')
        if not ant in calc:
            calc[ant] = [[] for i in range(6)]

        calc[ant][0].append(d[0])
        calc[ant][1].append(d[2])
        calc[ant][2].append(d[3])
        calc[ant][3].append(d[4])
        calc[ant][4].append(d[5])
        calc[ant][5].append(d[6])

    for a in calc.keys():
        for i in range(6):
            calc[a][i] = np.array(calc[a][i])
        
    return(calc)


calc1 = readCalc(args.files[0])
calc2 = readCalc(args.files[1])


dcalc = {}
for a in calc1.keys():
    dcalc[a] =  [[] for i in range(6)]
    for i in range(6):
        dcalc[a][i] = calc1[a][i] - calc2[a][i]

    if np.count_nonzero(dcalc[a][0]) > 0:
        print("Error: In consistent setup")
        sys.exit(1)



for a in calc1.keys():
#for a in ['AK18', 'AK32','AK34', 'AK35']:
    if args.uv:
        x = calc1[a][3] - calc1[refAnt][3]
        y = calc1[a][4] - calc1[refAnt][4]
    else:
        x = calc1[a][0]/60.0/60.0
        if args.abs:
            y = calc1[a][c]*scale
            y2 = calc2[a][c]*scale
            if subRef:
                y  -= calc1[refAnt][c]*scale
                y2 -= calc2[refAnt][c]*scale
                

        else:
            y = dcalc[a][c]*scale
            if subRef:
                y -= (calc1[refAnt][c]-calc2[refAnt][c])*scale

    plt.plot(x,y,label=a)
    if False and args.abs:
        plt.plot(x,y2,label=a)

if args.uv:
    plt.ylabel('U (m)')
    plt.xlabel('V (m)')
else:
    plt.ylabel(ylabel)
    plt.xlabel('Time (hrs)')

plt.legend()
plt.show()
