# -*- coding: utf-8 -*-
"""
Interactive application to take user inputs
"""
import logging
import os

import colorama
import requests
import win_unicode_console
from colorama import Fore

from ..assets.version import get_value as get_version
from ..bots import run_bot
from ..utils.update_checker import check_updates
from .arguments import get_args
from .display import (cancel_method, debug_mode, description, epilog,
                      error_message, input_suppression)

logger = logging.Logger('CORE')


def init():
    os.environ['version'] = get_version()

    win_unicode_console.enable()
    colorama.init()
    description()

    args = get_args()

    levels = ['NOTSET', 'WARN', 'INFO', 'DEBUG']
    level = os.getenv('LOG_LEVEL')
    if not level:
        level = levels[args.log] if args.log else 'NOTSET'
    # end if
    if level != 'NOTSET':
        os.environ['debug_mode'] = 'yes'
        logging.basicConfig(
            level=logging.getLevelName(level),
            format=Fore.CYAN + '%(asctime)s '
            + Fore.RED + '[%(levelname)s] '
            + Fore.YELLOW + '(%(name)s)\n'
            + Fore.WHITE + '%(message)s' + Fore.RESET,
        )
        debug_mode(level)
    # end if

    if args.suppress:
        input_suppression()
        print(args)
    # end if

    if args.bot:
        os.environ['BOT'] = args.bot
    # end if

    for key, val in args.extra.items():
        os.environ[key] = val[0]
    # end for

    # requests.urllib3.disable_warnings(
    #     requests.urllib3.exceptions.InsecureRequestWarning)
    # # end if
# end def


def start_app():
    init()

    check_updates()
    cancel_method()

    try:
        bot = os.getenv('BOT', '').lower()
        run_bot(bot)
    except Exception as err:
        if os.getenv('debug_mode') == 'yes':
            raise err
        else:
            error_message(err)
        # end if
    # end try

    epilog()

    # if Icons.isWindows and get_args().suppress is False:
    #     input('Press ENTER to exit...')
    # # end if
# end def