import argparse
from pathlib import Path

from metadata_client.metadata_client import MetadataClient

from .config import webservice as config

parser = argparse.ArgumentParser(
    description='Update run status at MDC for a given run id.')
#  TODO: unify configuration argument names across the project
parser.add_argument('--conf-file', type=str, help='Path to webservice config',
                    default=None)
parser.add_argument('--flg', type=str, choices=["NA", "R", "A"], required=True,
                    help='Status flag for MDC request: NA - not available, R - running, A - available.')  # noqa
parser.add_argument('--rid', type=int, help='Run id from MDC')
parser.add_argument('--msg', type=str, help='Message string to MDC',
                    default='Error while job submission')
args = vars(parser.parse_args())

conf_file = args['conf_file']
rid = args['rid']
flg = args['flg']
msg = args['msg']

if conf_file is not None:
    config.configure(includes_for_dynaconf=[Path(conf_file).absolute()])

mdconf = config['metadata-client']
client_conn = MetadataClient(client_id=mdconf['user-id'],
                             client_secret=mdconf['user-secret'],
                             user_email=mdconf['user-email'],
                             token_url=mdconf['token-url'],
                             refresh_url=mdconf['refresh-url'],
                             auth_url=mdconf['auth-url'],
                             scope=mdconf['scope'],
                             base_api_url=mdconf['base-api-url'])

print(f"Updating run {rid} to status {flg} at {mdconf['base-api-url']}")
response = client_conn.update_run_api(rid, {'flg_cal_data_status': flg,
                                            'cal_pipeline_reply': msg})

if response.status_code == 200:
    print('Run is updated')
else:
    print(f'Update failed {response}')