#!/usr/bin/python3

import pandas as pd
import matplotlib.pyplot as plt
import argparse
import sys
import os
import json
import logging
from copy import deepcopy

import plot_sat_set_change as pssc


def log_sat_set_changes(filename:str, one_sec=False):
    epoch = 1
    epoch_list = []

    fp = open(filename)

    while epoch:
        epoch_time, epoch_sats = pssc.read_next_epoch(fp, one_sec)
        if epoch_time is None:
            break
        
        d = pssc.combine_sats_in_epoch(epoch_sats)
        epoch_d = {'Time': epoch_time} | d
        #print('epoch_d:')
        #print(json.dumps(epoch_d, indent=4))

        epoch_list.append(epoch_d)

        #sys.exit()
        #input()
    fp.close()
    df = pd.DataFrame(epoch_list)

    return df


def main():
    parser = argparse.ArgumentParser(
        description='Apply an elevation mask with t0x2t0x.',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter,
    )
    parser.add_argument(
        '-f', "--filename",
        default='TitanPlayer_log.txt',
        help="File to process"
    )
    parser.add_argument(
        "--csv_fname",
        default=None,
        help="Where to store the results. If None, then append '_sat_sets.csv'"
             "to FILENAME",
    )
    parser.add_argument(
        "--verbose", "-v",
        action='count',
        default=0,
        help="use multiple -v for more detailed messages."
    )

    logger_format = (
            #"[%(asctime)s][%(levelname)-8s]"
            "[%(levelname)-8s]"
            "[%(filename)11s:%(lineno)-5s] "
            "%(funcName)-10s: %(message)s"
            )
    args = parser.parse_args()
    logging.basicConfig(
        level=logging.WARNING - (10 * args.verbose),
        format=logger_format,
        stream=sys.stdout
    )
    logging.debug(args)
    df = log_sat_set_changes(args.filename)
    logging.info(df)

    if args.csv_fname is None:
        args.csv_fname = f'{args.filename[:-4]}_sat_sets.csv'

    print(f'Saving {args.csv_fname}')
    df.to_csv(args.csv_fname, index=False)



if __name__ == '__main__':
    main()
