#!/usr/bin/env python3

from fsboot import init

init()

import os
import sys

if sys.version_info[0] < 3 or sys.version_info[1] < 2:
    print("You need at least Python 3.2 to run FS-UAE Arcade")
    sys.exit(1)

if os.environ.get("FSGS_PYTHONPATH", ""):
    sys.path.insert(0, os.environ.get("FSGS_PYTHONPATH"))

if os.getcwd().startswith("C:\\msys64\\home\\"):
    os.environ["PATH"] = "C:\\msys64\\mingw64\\bin;" + os.environ["PATH"]

os.environ["SDL_VIDEO_MAC_FULLSCREEN_SPACES"] = "0"


def print_version():
    import launcher.version

    print(launcher.version.VERSION)


def frozen_qpa_platform_plugin_path():
    import fsboot

    os.environ["QT_QPA_PLATFORM_PLUGIN_PATH"] = os.path.join(
        fsboot.executable_dir(), "platforms"
    )


def frozen_python_libs():
    import fsboot

    libs_dirs = [fsboot.executable_dir()]
    if sys.platform == "darwin":
        # Add .app/Contents/Resources/Python to libs_dirs
        libs_dir = os.path.abspath(
            os.path.join(fsboot.executable_dir(), "..", "Resources", "Python")
        )
        print(libs_dir, os.path.exists(libs_dir))
        if os.path.exists(libs_dir):
            libs_dirs.append(libs_dir)
        libs_dir = os.path.abspath(
            os.path.join(
                fsboot.executable_dir(), "..", "..", "..", "..", "..", "Python"
            )
        )
        print(libs_dir, os.path.exists(libs_dir))
        if os.path.exists(libs_dir):
            libs_dirs.append(libs_dir)
    else:
        libs_dir = os.path.abspath(
            os.path.join(fsboot.executable_dir(), "..", "..", "Python")
        )
        print(libs_dir, os.path.exists(libs_dir))
        if os.path.exists(libs_dir):
            libs_dirs.append(libs_dir)

    for libs_dir in libs_dirs:
        for item in os.listdir(libs_dir):
            if item.endswith(".zip"):
                path = os.path.join(libs_dir, item)
                print("adding", path)
                sys.path.insert(0, path)


def frozen_requests_ca_cert():
    import fsboot

    data_dirs = [fsboot.executable_dir()]

    # FIXME: share-dir?
    # FIXME: expose variable outside of module?
    # get_data_dirs() ? get_data_dir()?

    if sys.platform == "darwin":
        data_dir = os.path.abspath(
            os.path.join(fsboot.executable_dir(), "..", "Resources", "Data")
        )
        print(data_dir, os.path.exists(data_dir))
        if os.path.exists(data_dir):
            data_dirs.append(data_dir)
        data_dir = os.path.abspath(
            os.path.join(
                fsboot.executable_dir(), "..", "..", "..", "..", "..", "Data"
            )
        )
        print(data_dir, os.path.exists(data_dir))
        if os.path.exists(data_dir):
            data_dirs.append(data_dir)
    else:
        data_dir = os.path.abspath(
            os.path.join(fsboot.executable_dir(), "..", "..", "Data")
        )
        print(data_dir, os.path.exists(data_dir))
        if os.path.exists(data_dir):
            data_dirs.append(data_dir)

    for data_dir in data_dirs:
        path = os.path.join(data_dir, "cacert.pem")
        if os.path.exists(path):
            print("[HTTP] Using {}".format(path))
            os.environ["REQUESTS_CA_BUNDLE"] = path
            break


def main():
    if getattr(sys, "frozen", False):
        frozen_qpa_platform_plugin_path()
        frozen_python_libs()
        frozen_requests_ca_cert()

    if "--version" in sys.argv:
        print_version()
        sys.exit(0)

    try:
        import arcade.arcade_main

        arcade.arcade_main.main()
        print("main returned")
    finally:
        from fsbc.application import Application

        application = Application.instance()
        if application:
            print("calling Application stop")
            Application.get().stop()
        from fsbc.signal import Signal

        print("sending quit signal")
        Signal("quit").notify()


main()

# Dummy imports for cx_Freeze
sys.exit(0)

# noinspection PyUnreachableCode,PyUnresolvedReferences,PyProtectedMember
import idna.idnadata

# noinspection PyUnreachableCode,PyUnresolvedReferences,PyProtectedMember
import pkg_resources._vendor.appdirs

# noinspection PyUnreachableCode,PyUnresolvedReferences,PyProtectedMember
import pkg_resources._vendor.packaging.requirements

# noinspection PyUnreachableCode,PyUnresolvedReferences,PyProtectedMember
import pkg_resources._vendor.packaging.specifiers

# noinspection PyUnreachableCode,PyUnresolvedReferences,PyProtectedMember
import pkg_resources._vendor.packaging.version

# noinspection PyUnreachableCode,PyUnresolvedReferences,PyProtectedMember
import pkg_resources._vendor.pyparsing

# noinspection PyUnreachableCode,PyUnresolvedReferences,PyProtectedMember
import pkg_resources._vendor.six

# noinspection PyUnreachableCode,PyUnresolvedReferences,PyProtectedMember
import PyQt5.sip

# noinspection PyUnreachableCode,PyUnresolvedReferences,PyProtectedMember
import _sysconfigdata_m_darwin_darwin
