#!/usr/bin/env python3

import sys
import os
import shutil
import logging
import argparse
import subprocess

import devkit_utils.resolve

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

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

def session_select_command():
    if shutil.which('holo-session-select'):
        return 'holo-session-select'
    return 'steamos-session-select'

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--verbose', required=False, action='store_true')
    parser.add_argument('--delete-title', required=False, action='store', help='Delete a devkit title by name')
    parser.add_argument('--delete-all-titles', required=False, action='store_true', default=False, help='Delete all devkit titles uploaded')
    parser.add_argument('--reset-steam-client', required=False, action='store_true', default=False, help='Reset Steam client and delete all local Steam content')
    conf = parser.parse_args()

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

    if conf.delete_all_titles:
        subprocess.check_call('rm -rf ~/devkit-game/*', shell=True)
    elif conf.delete_title:
        gamepath = os.path.expanduser( os.path.join( '~/devkit-game', conf.delete_title ) )
        if not os.path.isdir(gamepath):
            print(f'Not found: {gamepath}')
        else:
            subprocess.check_call(f'rm -r {gamepath}', shell=True)

    # synchronize the Steam client's view of the devkit games with the on disk state
    try:
        devkit_utils.resolve.resolve_shortcuts()
    except Exception as e:
        logger.warning(f'Steam client sync of devkit games failed: {e}')

    if conf.reset_steam_client:
        # first make sure any sideloaded trampoline has been deleted
        devkit_steam_trampoline_path = os.path.join(DEVKIT_TOOL_FOLDER, 'devkit-steam')
        if os.path.exists(devkit_steam_trampoline_path):
            os.unlink(devkit_steam_trampoline_path)

        # wipe the local Steam install
        subprocess.check_call(f'rm -rf ~/.local/share/Steam', shell=True)

        # restart the session, which will initiate a reinstall of Steam from the OS client
        subprocess.check_call([session_select_command(), 'gamescope'])
