#!/usr/bin/env python3
import csv
import glob
import json
import re
import sys
import traceback
f = None;
directory = '/home/pmeigs/gitrepos/moffettMarquee/';

myInfo = {
  "Welcome": {
    "From":         "",
    "Until":        "",
    "visitorName":  "",
    "visitorFrom":  "",
  },

  "Schedule": {
   "From":           "",
   "Until":          "",
   "Event Time":     "",
   "Until Time":     "",
   "Event Name":     "",
   "Location":       "",
  }
}

myVarItem = {
  "Welcome":  "var marqueeInfo = ",
  "Schedule": "var eventSchedule = "
}

myJson = {
  "Welcome":  {},
  "Schedule": {},
}

myShortcuts = {
  "genesis" : "0000/00/00 00:00:00",
  "genisys" : "0000/00/00 00:00:00",
  "genisis" : "0000/00/00 00:00:00",
  "forever" : "9999/12/31 23:59:00"
}

def main():
  global f;
  filenameGlob = '';
  outFile = 'marqueeInfo.js.new';
  if len(sys.argv) > 1 :
    filenameGlob = sys.argv[1];
  if len(sys.argv) > 2:
    outFile = sys.argv[2];
  print("// InFile =", filenameGlob);
  # for filename in glob.glob(directory + f"{filenameGlob}*.[cC][sS][vV]"):
  #   print("// ", filename);

  # ========================================
  # Read file into array by section key
  #  ========================================

  wholeFile = {};
  for filename in  [filenameGlob]:  # glob.glob(directory + f"{filenameGlob}*.[cC][sS][vV]"):
    fileLines = [];
    f = open(filename, 'r', encoding='utf-8-sig');
    currentSection = None;
    for line in f:
      thisLine = line.strip();
      if thisLine.startswith('#'):
        continue;
      fields = thisLine.split(',');
      maxLen = -1;
      for field in fields:
        if len(field) > maxLen:
          maxLen = len(field);
        #endif
      #endfor 
      if maxLen == 0:
        continue;    

      if len(fields[0]) > 0:
        currentSection = fields[0];
        # print(fields[0]);
        if not currentSection in wholeFile:
          wholeFile[currentSection] = []

      # print("->", thisLine);
      wholeFile[currentSection].append(thisLine);
    # endfor    
    f.close(); 
    f = None;

    # ========================================
    # process file from array by section key
    # ========================================

    for key in wholeFile.keys():
      # print("key", key);
      myData = csv.DictReader(wholeFile[key]);      
      #print("wholeFile");
      #print(wholeFile);
      # dString = json.dumps(myData)
      for row in myData:
        # dString = json.dumps(dict(row))
        #print("row=", type(row));
        # print(dir(row));
        for dataKey in row.keys():
          if dataKey in myInfo[key]:
            # print(dataKey, " = ", row[dataKey]);
            myInfo[key][dataKey] = row[dataKey];
        # print(sqlRow);
        if key == "Welcome":
          fromVal = myInfo[key]["From"];
          fromVal = myShortcuts.get(fromVal, fromVal);
          # print("from=", fromVal);
          if not fromVal in myJson[key]:
            myJson[key][fromVal] = {};
          myJsonEntry = myJson[key][fromVal];
          # print("key= ", key);
          # for xkey in myInfo[key].keys():
          #   print("*xkey=", xkey, " value=", myInfo[key][xkey]);
          # xkey = "visitorName";
          # print(json.dumps(myInfo[key]));
          # print("myInfo[", xkey, "]=", myInfo["Welcome"]["visitorName"]);
          myJsonEntry["visitorName"] = myInfo[key]["visitorName"];
          myJsonEntry["visitorFrom"] = myInfo[key]["visitorFrom"];
          untilVal = myInfo[key]["Until"];
          untilVal =  myShortcuts.get(untilVal, untilVal)
          myJsonEntry["until"]       = untilVal;
        elif key == "Schedule":
          if myInfo[key]["From"] and len(myInfo[key]["From"]) > 0:
            fromVal = myInfo[key]["From"];
            fromVal = myShortcuts.get(fromVal, fromVal)[0:10];
          if not fromVal in myJson[key]:
            myJson[key][fromVal] = {};
          myJsonEntry = myJson[key][fromVal];

          if myInfo[key]["Until"] and len(myInfo[key]["Until"]) > 0:
            untilVal = myInfo[key]["Until"];
            untilVal =  myShortcuts.get(untilVal, untilVal)[0:10];
          myJsonEntry["until"] = untilVal;

          if not "events" in myJsonEntry:
            myJsonEntry["events"] = {};
          # myJsonEntry["startTime"] = "";
          myJsonEvents = myJsonEntry["events"];
          eventTime = myInfo[key]["Event Time"]
          untilTime = myInfo[key]["Until Time"]
          if not eventTime in myJsonEvents:
            myJsonEvents[eventTime] = {};
          myJsonEventAtTime = myJsonEvents[eventTime];

          myJsonEventAtTime["eventName"] = myInfo[key]["Event Name"];
          myJsonEventAtTime["untilTime"] = myInfo[key]["Until Time"];
          myJsonEventAtTime["eventLocation"] = myInfo[key]["Location"];
        # endif  
      # dString = json.dumps(myJson[key], indent=2);  
      # print(myVarItem[key], dString);

      # end for  
    # end for 
    print("// OutFile =", outFile);
    of =  open(outFile, 'w', encoding='utf-8-sig');
    for key in wholeFile.keys():
      dString = json.dumps(myJson[key], indent=2);  
      of.write("\n" + myVarItem[key] + " " + dString);
    #wndfor  
    of.close();
    of = None; 


#endDef
if __name__ =='__main__':
    try:
        main()
    except KeyboardInterrupt:
        pass
    except:
        traceback.print_exc()
        pass
    if f:
      f.close();
    # print ("Done")



