
import datetime

Thresh = 86000; # Don't want to deal with partial days

sysData = [ {"sysName":"GPS", "sys":0, "start":1, "stop":32},
            {"sysName":"SBAS", "sys":1, "start":120 , "stop":158},
            {"sysName":"GLONASS", "sys":2, "start":1 , "stop":24},
            {"sysName":"GALILEO", "sys":3,"start":1 , "stop":36},
            {"sysName":"QZSS", "sys":4, "start":193 , "stop":202},
            {"sysName":"IRNSS", "sys":9, "start":1 , "stop":14},
            {"sysName":"BDS", "sys":10, "start":1 , "stop":63} ]

# Not very pythonic but easy to understand - reverse index into the above
reverse = [0,1,2,3,4,None,None,None,None,5,6]

startTime = datetime.datetime(2020,1,1)

def header(fOut):
  fOut.write("<tr><th>Date</th><th>Day Number</th>")
  fOut.write("<th>Mean FLL+PLL C/No</th>")
  fOut.write("<th>Sigma FLL+PLL C/No</th>")
  fOut.write("<th>Mean PLL C/No</th>")
  fOut.write("<th>Sigma PLL C/No</th>")
  fOut.write("<th>Base Epochs PLL+FLL</th>")
  fOut.write("<th>Rover Epochs PLL+FLL</th>")
  fOut.write("<th>Base Epochs PLL</th>")
  fOut.write("<th>Rover Epochs PLL</th>")
  fOut.write("<th>All relative epochs (7 deg mask)[%]</th>")
  fOut.write("<th>PLL relative epochs (7 deg mask)[%]</th>")
  fOut.write("<th>Base gaps > 20s</th>")
  fOut.write("<th>Rover gaps > 20s</th>")
  fOut.write("<th>Base FW</th>")
  fOut.write("<th>Rover FW</th>")
  fOut.write("</tr>")

for i in range(len(sysData)):
  for sv in range(sysData[i]['start']-1,sysData[i]['stop']):
    with open(sysData[i]['sysName'] + '-' + (str(sv+1)) + '.html','w') as fOut:
      fOut.write("<html><table border='1'>\n")
      header(fOut)
      fOut.write("\n")
      fOut.close()

with open('results.txt','r') as fid:
  for line in fid:
    tokens = line.rstrip().split(',')
    #if(int(tokens[4]) == 2):
    thisSys = int(tokens[4])
    if(    ((thisSys >= 0) and (thisSys <= 4))
        or (thisSys == 9)
        or (thisSys == 10) ):
      index = reverse[thisSys]
      sv = int(tokens[3]) 
      if( (sv >= sysData[index]['start']) and (sv <= sysData[index]['stop'])):
        if( (len(tokens) > 17) and (int(tokens[16]) >= Thresh) and (int(tokens[17]) >= Thresh) ):
          baseEpochs_All = int(tokens[12])
          roverEpochs_All = int(tokens[13])
          baseEpochs_PLL = int(tokens[14])
          roverEpochs_PLL = int(tokens[15])
          year = int(tokens[0])
          month = int(tokens[1])
          day = int(tokens[2])
          meanCNo_All = float(tokens[8])
          sigCNo_All = float(tokens[9])
          meanCNo_PLL = float(tokens[10])
          sigCNo_PLL = float(tokens[11])

          baseGaps = None
          roverGaps = None
          if(len(tokens) > 19):
            baseGaps = int(tokens[18])
            roverGaps = int(tokens[19])

          baseFW = None
          roverFW = None
          if(len(tokens) > 21):
            baseFW = tokens[20]
            roverFW = tokens[21]
          
          dateStrDash = str(year) + '-' + str(month).zfill(2) + '-' + str(day).zfill(2)
          dateStr = str(year) + str(month).zfill(2) + str(day).zfill(2)
          with open(sysData[index]['sysName'] + '-' + str(sv) + '.html','a') as fOut:
            fOut.write('<tr>');
            fOut.write('<td><a href="'+ dateStr + '/' + dateStr + sysData[index]['sysName'] + '-' + str(sv) +'.png">%s</a></td>' % dateStrDash)
            current = datetime.datetime(year,month,day)
            fOut.write('<td>%d</td>' % int( (current-startTime).total_seconds()/86400) )
            
            fOut.write('<td>%.3f</td>' % meanCNo_All)
            fOut.write('<td>%.3f</td>' % sigCNo_All)
            fOut.write('<td>%.3f</td>' % meanCNo_PLL)
            fOut.write('<td>%.3f</td>' % sigCNo_PLL)
            fOut.write('<td>%d</td>' % (baseEpochs_All))
            fOut.write('<td>%d</td>' % (roverEpochs_All))
            fOut.write('<td>%d</td>' % (baseEpochs_PLL))
            fOut.write('<td>%d</td>' % (roverEpochs_PLL))
            if( (baseEpochs_All + roverEpochs_All) > 0):
              fOut.write('<td>%.3f</td>' % (100.0 * (baseEpochs_All - roverEpochs_All)/ ( 0.5* (baseEpochs_All + roverEpochs_All) )) )
            else:
              fOut.write('<td>Nan</td>')

            if( (baseEpochs_PLL + roverEpochs_PLL) > 0):
              fOut.write('<td>%.3f</td>' % (100.0 * (baseEpochs_PLL - roverEpochs_PLL)/ ( 0.5* (baseEpochs_PLL + roverEpochs_PLL) )) )
            else:
              fOut.write('<td>Nan</td>')

            if(baseGaps is not None):
              fOut.write('<td>%d</td>' % (baseGaps))
            else:
              fOut.write('<td>-</td>')
            if(roverGaps is not None):
              fOut.write('<td>%d</td>' % (roverGaps))
            else:
              fOut.write('<td>-</td>')

            if(baseFW is not None):
              fOut.write('<td>%s</td>' % (baseFW))
            else:
              fOut.write('<td>-</td>')
            if(roverFW is not None):
              fOut.write('<td>%s</td>' % (roverFW))
            else:
              fOut.write('<td>-</td>')


            fOut.write("</tr>\n")
            fOut.close()                                                      

for i in range(len(sysData)):
  for sv in range(sysData[i]['start']-1,sysData[i]['stop']):
    with open(sysData[i]['sysName'] + '-' + (str(sv+1)) + '.html','a') as fOut:
      header(fOut)
      fOut.write("</table></html>\n")
      fOut.close()
