#!/usr/bin/python3

"""This script imports the quantities from several snapshots in time
and bundles them into one singel file, that visualises the quantity
of a specific firmware-version at a specific time.
"""

import json
import csv
import os

# get files in current dir
files = os.listdir()

# filter for csv only
csv_files = []
for f in files:
    if ".csv" in f:
        csv_files.append(f)

# open csv-files one after another. Then analyse the given firmwares
# and count their occurences

firmwares_at_date = {}
for f in csv_files:
    fd = open(f, "r")
    reader = csv.reader(fd, delimiter=';')
    time = f[:16]
    firmwares = {}

    # read avaiable firmwares into structure and count them
    for row in reader:
        #print(row)
        try:
            firmwares.get(row[2])
            firmwares[row[2]] += 1
        except:
            firmwares[row[2]] = 1

    firmwares_at_date[time] = firmwares

    fd.close()


# store filtered raw data as json
with open("firmwares_at_date.json", "w") as f:
    f.write(json.dumps(firmwares_at_date))
    f.close()


# dump data into csv for excel visualization
with open("firmwares_at_date.txt", "w") as f:
    writer = csv.writer(f, delimiter=';')
    dates_iter = firmwares_at_date.keys()
    dates = []

    for date in dates_iter:
        dates.append(date)

    title_row = ['fw_name']
    dates.sort()
    title_row.extend(dates)

    writer.writerow(title_row)

    # serialize data in the rows
    firmwares = {}
    # if firmware is already in dict, append value. if not, create it and fill
    # dates from before with 0
    count = 0
    for date in dates:
        fws = firmwares_at_date.get(date)
        for fw in fws:
            try:
                firmwares.get(fw)
                firmwares[fw].append(fws.get(fw))
            except:
                firmwares[fw] = []

                c = 0
                while c < count:
                    firmwares[fw].append(0)
                    c += 1

                firmwares[fw].append(fws.get(fw))
        # increase counter. Fills cells with zero, if new fw appears
        count += 1


    # write firmwares to csv-file
    for fw in firmwares:
        row = []
        row.append(fw)
        row.extend(firmwares.get(fw))

        writer.writerow(row)

    f.close()
