#!/usr/bin/env python
from struct import *

"""

The first 32 bit is hardcoded... dont know why...
Ive hardcoded the team ID... just in case we dont submit for someone else...

Results object...
Results - list... [{'headers': {'Timecode': 1, 'count': 0}, 'values': [{'addr': 222, 'value': 323}, {'addr': 222, 'value': 323}]}, {'headers': {'Timecode': 3, 'count': 1}, 'values': [{'addr': 222, 'value': 323}, {'addr': 222, 'value': 323}]}]


"""

def RunChecks(Results):
    """
    Checks the whole dataset for same port addresses....and eliminates them
    Removes entries where the value in a port is same as its immidiate previous port 
    Removes empty sets. no frames then delete sequence    
    """
    # if result[x]['values'][0]['addr'] has been done before, pop out result[x]['values'][0]
    temp = []
    newsequence = []
    for result in Results:  #outer loop - sequence of Simulation Frames
        newframe = []
        temp2 = []
        for frame in result['frames']: # inner loop
            if frame['addr'] not in temp:
                if len(temp2) > 0:
                    if frame['value'] != temp2[-1]:
                        newframe += [frame]
                else:
                     newframe += [frame]
            temp += [frame['addr']]
            temp2 += [frame['value']]
        if len(newframe) > 0:
            newsequence += [{'headers': result['headers'], 'frames': newframe }]
    return newsequence


def MakeSubmitFile(ScenerioID, Results):
    #probably do data checking...
    #add the first bit
    solution = pack('I', 0xCAFEBABE)
    #our team id is 248
    solution += pack('I', 248)
    #Scenerio ID
    solution += pack('I', ScenerioID)
    #TimeStep0
    for result in RunChecks(Results):
        #outer loop - sequence of Simulation Frames
        solution += pack('I', result['headers']['Timecode'])
        solution += pack('I', result['headers']['count'])
        for frame in result['frames']:
            solution += pack('I', frame['addr'])
            solution += pack('d', frame['value'])
        

#    solution += pack('I', TimeStep0)
    print solution
    file = open("test.bin","wb")
    file.write(solution)
    file.close()
    #yay!!!!

#Example usage
results = [{'headers': {'Timecode': 1, 'count': 0}, 
            'frames': [{'addr': 22322, 'value': 323},
                       {'addr': 2224, 'value': 323}]},
            {'headers': {'Timecode': 3, 'count': 1},
            'frames': [{'addr': 222232, 'value': 323},
                        {'addr': 22442, 'value': 323}]}]
MakeSubmitFile(1002, results)