#!/usr/bin/python3

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

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

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

    edc-uploader /path/to/8834_hy2b_crd_20251210_0704_00
    edc-uploader /path/to/*npt')
    edc-uploader --api-key=API_KEY /path/to/*npt')
    
"""
		)
	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)"
	)
	
	args, arg_path = parser.parse_known_args()
	if not arg_path:
		parser.error("No files found!")
		
	' init logger '
	logger = Logger()
	logger.set_level(args.log_level)
	
	' check files ' 
	path_files = []
	path_files_ignored = []
	for arg in arg_path:
		path = os.path.abspath(arg)
		if not os.path.isfile(path):			
			path_files_ignored.append(path)
			continue
		path_files.append(path)
			
	for path_file_ignored in path_files_ignored:
		if os.path.isdir(path_file_ignored):
			logger.warning(path_file_ignored+' is a directory! IGNORED!')
		else:
			logger.warning(path_file_ignored+' does not exist! IGNORED!')

	if len(path_files) == 0:
		parser.error("No files found!")

	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
		)
	
	for path_file in path_files:	
		edc_api.upload(path_file)

if __name__ == "__main__":
		
	main()