#!/usr/bin/python3
"""
@file ifpostpro.py
@copyright ESO - European Southern Observatory
@defgroup meltcs	
@brief IFTEST - Subsystem Interface Testing
Tool to inspect PCAP files
"""


import os
import argparse
from datetime import datetime
from ifpostprocessinglib.ifpostprocessing import Postprocessing
from ifpostlib.pcapmudpi import PcapMudpi


def parse_arguments():
    example_text = '''example:
    ifpostpro iftest_m4_pcap_mudpi.yaml m4_capture.pcap 100 --verbose
    '''

    # Instantiate the parser
    parser = argparse.ArgumentParser(description='Tool to inspect PCAP subsystem files.',
                                     epilog=example_text,
                                     formatter_class=argparse.RawDescriptionHelpFormatter)

    # Required Subsystem and Pcap file
    #parser.add_argument('subsystem', type=str, help='Subsystem ID: PFSA, M2, M4. Example: "M2"')
    parser.add_argument('pload', type=str, help='Full path and name of YAML file with the payload structure. Example: m2_payload.yaml')
    parser.add_argument('pcap', type=str, help='Full path and name of PCAP file. Example: /home/eltdev/mypcap.pcap')
    parser.add_argument('topicid', type=int, help='Topic ID. Example: 100')
    parser.add_argument('--verbose', action='store_true', help='Verbose mode.')

    # Parse input arguments
    args = parser.parse_args()

    # Server,browse node and filename from input data
    #subsystem  = args.subsystem
    pload      = args.pload
    pcap       = args.pcap
    topicid    = args.topicid
    verbose    = args.verbose

    # Raise a File not Found error
    if not os.path.isfile(os.environ.get('INTROOT') + '/resource/config/' + pload):
        raise FileNotFoundError(pload)

    # Raise a File not Found error
    if not os.path.isfile(pcap):
        raise FileNotFoundError(pcap)
    
    #pload = 'config/' + pload
    return pload,pcap,topicid,verbose

def main():
    # Input Arguments
    pload_filename,pcap_filename,topic_id,verbose = parse_arguments()

    # Instanciate the payload data set and populates it
    # with the actual data
    try: 
        payload_data = PcapMudpi(pload_filename,pcap_filename,topic_id,show_info=True)
    except:
        raise

    if verbose:
        print(f'Number of packets: {payload_data.number_of_packets}')
        print(f'Number of packets discarded: {payload_data.discarded}')
        print(f'Number of processed data sets: {payload_data.processed_datasets}')

if __name__ == "__main__":
    main()

