#!/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
from edcapi.Logger import Logger

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

    edc-downloader --output-path=/tmp/dl/ /archive/data/npt_crd_v2/beidou3m1/2026
    
"""
		)
	
	parser.add_argument(
		"--help",
		action="help",
		help="Display this help message"
	)
	
	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(
		"--update-only",
		action="store_const",
		default='False',
		const='True',
		help=argparse.SUPPRESS,
	)

	parser.add_argument(
		"--preserve-timestamp",
		action="store_const",
		default='False',
		const='True',
		help=argparse.SUPPRESS,
	)
		
	parser.add_argument(
		"--output-path",
		nargs="?",
		default=None,
		help="Output directory where files are stored (Default: Current Directory)"
	)
	
	parser.add_argument(
		"--log-path",
		nargs="?",
		default=None,
		help="Path of log file (Default: No log file)"
	)
	
	parser.add_argument(
		"--file-pattern",
		nargs="?",
		default=None,
		help="File pattern as regular expression (e.g. `^.*_[0-9]{8}.np2$`)\n\
Example: `^.*_[0-9]{8}.np2$` -> daily normal point files of version 2\n\
Example: `^.*_[0-9]{6}.np2$` -> monthly normal point files of version 2"
	) 
	
	args, arg_path = parser.parse_known_args()
	if not arg_path:
		parser.error("No URL found!")
	if len(arg_path) > 1:
		parser.error("More than one URL found (`"+'`,`'.join(arg_path)+"'`)!")
	path_url = arg_path[0]
	
	' init logger '
	logger = Logger()
	logger.set_level(args.log_level)
	
	if args.output_path == None:
		path_output = os.getcwd()	
	else:
		path_output = os.path.abspath(args.output_path)
	if not os.path.isdir(path_output):
		logger.error('Output path `'+path_output+'` does not exist!')
		logger.error('Create directory first to proceed!')
		sys.exit(0)
				
	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
		)
	summary = edc_api.download(
		path_url,
		output_path=args.output_path,
		update_only=args.update_only,
		preserve_timestamp=args.preserve_timestamp,
		log_path=args.log_path,
		file_pattern=args.file_pattern
	)
	
if __name__ == "__main__":
	
	main()