#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import argparse
import sys
from psas_packet import messages

chunksize = 100000000 # 100 MB

PSAS = {cls.fourcc: cls for cls in messages.PSAS_MESSAGES}
output = {cls.fourcc: [] for cls in messages.PSAS_MESSAGES}


parser = argparse.ArgumentParser(prog='gen-psas-types')
parser.add_argument('-i', '--input', type=argparse.FileType('r'),
                    help="log file to read")
args = vars(parser.parse_args())

f_in = args['input']

try:
    chunk = f_in.read(chunksize)
    while chunk != "":


        while len(chunk) > 0:
            # Read header:
            info = messages.Head.decode(chunk[:messages.Head.size()])
            chunk = chunk[messages.Head.size():]

            message_cls = PSAS.get(info['fourcc'], None)
            if message_cls is not None:

                line = []
                line.append(info['timestamp'])
                try:
                    unpacked = message_cls.decode(chunk[:message_cls.size])
                    for key, v in unpacked.items():
                        line.append(v)
                    chunk = chunk[message_cls.size:]
                except messages.MessageSizeError as e:
                    print("Message size", str(info), str(e))
                    chunk = chunk[info['length']:]
                except:
                    print("message read error", str(info))
                    chunk = chunk[info['length']:]
                output[info['fourcc']].append(line)
            else:
                print("unknown header ", info)
                chunk = chunk[info['length']:]


        chunk = f_in.read(chunksize)

finally:
    f_in.close()

for key, data in output.items():
    with open(str(messages.printable(key))+'.csv', 'w') as f_out:
        for line in data:
            for v in line:
                f_out.write(str(v))
                f_out.write(',')
            f_out.write('\n')
