#!/usr/bin/python3

import os
import sys
import re
import edcapi
import logging
import argparse

from edcapi.EDCArgumentParser import EDCArgumentParser
from edcapi.EDCHelpFormatter import EDCHelpFormatter

def main():
	
	' parse arguments '
	parser = EDCArgumentParser(
		prog="edc-data-browser",
		usage="edc-data-browser [OPTIONS]",
		formatter_class=EDCHelpFormatter,
		add_help=False,
		epilog="""\
Example:

    edc-data-browser --collection=NPT --start-data-date=2026-01-01 --end-data-date=2026-03-01 --station-id=18248101 --satellite-id=7603901
    edc-data-browser --collection=CPF2 --start-data-date=2026-01-01 --end-data-date=2026-03-01 --provider=DGF --satellite-id=7603901
    
"""
		)
	parser.add_argument(
		"--help",
		action="help",
		help="Display this help message"
	)
	
	parser.add_argument(
		"--output-path",
		nargs="?",
		default=None,
		help="Output path where to store output"
	)

	parser.add_argument(
		"--api-key",
		nargs="?",
		default=None,
		required=False,
		help="API key (optional if not in ~/.netrc)')"
	)
	
	parser.add_argument(
		"--debug",
		action="store_const",
		default=0,
		const=1,
		help=argparse.SUPPRESS,
	)
	
	parser.add_argument(
		"--log-level",
		nargs="?",
		default="INFO",
		choices=["DEBUG","INFO","WARNING","ERROR","CRITICAL"],
		help="Set Log Level (Default: INFO)"
	)
	
	parser.add_argument(
		"--output-format",
		default="json",
		choices=["json","csv","list"],
		help="Output format ('json','csv','list')"
	)
	
	parser.add_argument(
		"--collection",
		required=True,
		choices=["NP2","FR2","NPT","FRD","NP","FR","CPF2","CPF","LTT"],
		help="Dataset collection (`NP2`,`FR2`,`NPT`,`FRD`,`NP`,`FR`,`CPF2`,`CPF`,`LTT`)"
	)
	
	parser.add_argument(
		"--start-data-date",
		required=False,
		default=None,
		metavar="YYYY-MM-DD or YYYY-MM-DD HH:MM:SS",
		help="Start data date"
	)
	
	parser.add_argument(
		"--end-data-date",
		required=False,
		default=None,
		metavar="YYYY-MM-DD or YYYY-MM-DD HH:MM:SS",
		help="End data date"
	)
	
	parser.add_argument(
		"--start-incoming-date",
		required=False,
		default=None,
		metavar="YYYY-MM-DD or YYYY-MM-DD HH:MM:SS",
		help="Start incoming date"
	)
	
	parser.add_argument(
		"--end-incoming-date",
		required=False,
		default=None,
		metavar="YYYY-MM-DD or YYYY-MM-DD HH:MM:SS",
		help="End incoming date"
	)
	
	parser.add_argument(
		"--station-id",
		required=False,
		default=None,
		help="SOD of station (e.g. 18248101)"
	)
	
	parser.add_argument(
		"--satellite-id",
		required=False,
		default=None,
		help="Satellite ID (e.g. 7603901)"
	)
	
	parser.add_argument(
		"--version",
		required=False,
		default=None,
		help="Version (e.g. `00`,`01`,...)"
	)
	
	parser.add_argument(
		"--provider",
		required=False,
		default=None,
		help="Prediction Provider (e.g. `DGF`)"
	)
	
	parser.add_argument(
		"--status",
		required=False,
		default=None,
		help="Status (e.g. `valid`,`warning`,`error`,`new`)"
	)
	
	parser.add_argument(
		"--show-out-of-date",
		required=False,
		default='no',
		choices=["yes","no"],
		help="Show out-of-date datasets (e.g. `yes`,`no`)"
	)
	
	args = parser.parse_args()
		
	if args.api_key == None:
		edc_api = edcapi.API(
			debug=args.debug,
			log_level=args.log_level
		)
	else:
		edc_api = edcapi.API(
			api_key=args.api_key,
			debug=args.debug,
			log_level=args.log_level
		)
	
	response = edc_api.data_browser(\
		collection=args.collection, \
		start_data_date=args.start_data_date,\
		end_data_date=args.end_data_date,\
		start_incoming_date=args.start_incoming_date,\
		end_incoming_date=args.end_incoming_date,\
		station_id=args.station_id,\
		satellite_id=args.satellite_id,\
		version=args.version,\
		status=args.status,\
		provider=args.provider,\
		show_out_of_date=args.show_out_of_date,\
		output_path=args.output_path,\
		output_format=args.output_format,\
		)

	print (response)
	
if __name__ == "__main__":

	main()