#!/usr/bin/env python3

import os
import logging
import argparse
import tempfile
import json
from urllib.parse import quote_plus as urllib_quote_plus

import devkit_utils

logging.basicConfig(format='%(message)s', level=logging.DEBUG)
logger = logging.getLogger(__name__)

DEVKIT_TOOL_FOLDER = os.path.expanduser('~/devkit-game')

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--verbose', required=False, action='store_true')
    parser.add_argument('--appid', required=False, action='store')
    parser.add_argument('--gameid', required=False, action='store')
    conf = parser.parse_args()

    if conf.verbose:
        logger.setLevel(logging.DEBUG)
    else:
        logger.setLevel(logging.INFO)

    ret = {}

    try:
        devkit_utils.validate_steam_client()
    except devkit_utils.SteamClientNotRunningException as e:
        skipping = 'The Steam client is not running.'
        logger.warning(skipping)
        ret['error'] = skipping
    else:
        with tempfile.TemporaryDirectory(prefix='controller-config') as tempdir:
            response = os.path.join(tempdir, 'dumpcontrollerconfig')
            cmd = f'dumpcontrollerconfig?response={urllib_quote_plus(response)}'
            if conf.appid:
                cmd += f'&appid={conf.appid}'
            if conf.gameid:
                cmd += f'&gameid={conf.gameid}'
            logger.debug(f'command: {cmd}')
            devkit_utils.execute_steam_client_command(cmd)
            try:
                with devkit_utils.wait_on_file_response(response) as success_response:
                    logger.debug(success_response)
                    ret['success'] = success_response
            except devkit_utils.SteamResponse_Timeout:
                ret['error'] = 'timeout - Steam did not respond to the command request'
            except devkit_utils.SteamResponse_Error as e:
                ret['error'] = e.error_response

    # response gets written out to stdout
    print(json.dumps(ret))
