import csv
import json
import sys
from pathlib import Path

import msgpack


def recover_annotations_from_export(csv_path, info_path=None):
    output_file = csv_path.parent / 'annotation_player.pldata'

    if info_path is None:
        info_path = csv_path.parent.parent.parent.parent / 'info.json'

    print('Reading info file', info_path)
    with info_path.open('r') as fh:
        info = json.load(fh)

    print('Reading exported data', csv_path)
    recovered_data = []
    with csv_path.open('r') as fh:
        reader = csv.DictReader(fh)
        for input_row in reader:
            ts_ns = int(input_row['timestamp [ns]'])
            recovered_data.append({
                'topic': 'annotation',
                'label': input_row['label'],
                'timestamp': (ts_ns - info['start_time']) / 1e9,
                'timestamp_unix': ts_ns,
                'duration': 0.0,
                'added_in_player': input_row['added_in_player']
            })

    print('Saving recovered data data', output_file)
    with output_file.open('wb') as fh:
        for payload in recovered_data:
            packed_payload = msgpack.packb(payload, use_bin_type=True)
            fh.write(msgpack.packb(('annotation', packed_payload), use_bin_type=True))


if __name__ == '__main__':
    recover_annotations_from_export(*[Path(v) for v in sys.argv[1:]])
