#!/usr/bin/env python3
# -*-coding:UTF-8 -*

"""
Update AIL
============================

Update AIL in the background

"""

import os
import logging
import logging.config
import sys
import subprocess

sys.path.append(os.environ['AIL_BIN'])
##################################
# Import Project packages
##################################
from lib import ail_logger
from lib import ail_updates

logging.config.dictConfig(ail_logger.get_config(name='updates'))
def launch_background_upgrade(version):
    logger = logging.getLogger()
    logger.warning(f'launching background update {version}')
    update = ail_updates.AILBackgroundUpdate(version)
    nb_done = update.get_nb_scripts_done()
    update.start()
    scripts = update.get_scripts()
    scripts = scripts[nb_done:]
    for script in scripts:
        print('launching background script update', script)
        # launch script
        update.start_script(script)
        script_path = update.get_script_path()
        if script_path:
            try:
                process = subprocess.run(['python', script_path])
                if process.returncode != 0:
                    stderr = process.stderr
                    if stderr:
                        error = stderr.decode()
                        logger.error(error)
                        update.set_error(error)
                    else:
                        update.set_error('Error Updater Script')
                        logger.error('Error Updater Script')
                    sys.exit(0)
            except Exception as e:
                update.set_error(str(e))
                logger.error(str(e))
                sys.exit(0)

        if not update.get_error():
            update.end_script()
        else:
            logger.warning('Updater exited on error')
            sys.exit(0)

    update.end()
    logger.warning(f'ending background update {version}')


if __name__ == "__main__":
    if ail_updates.is_update_background_running():
        v = ail_updates.get_update_background_version()
        launch_background_upgrade(v)
    else:
        for ver in ail_updates.get_update_background_to_launch():
            launch_background_upgrade(ver)