"""A python app to (automatically) tag comic archives"""

# Copyright 2012-2014 Anthony Beville

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

#     http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import os
import sys
import signal
import traceback
import platform

from .settings import ComicTaggerSettings
# Need to load setting before anything else
SETTINGS = ComicTaggerSettings()

try:
    qt_available = True
    from PyQt5 import QtCore, QtGui, QtWidgets
    from .taggerwindow import TaggerWindow
except ImportError as e:
    qt_available = False


from . import utils
from . import cli
from .options import Options
from .comicvinetalker import ComicVineTalker

def ctmain():
    opts = Options()
    opts.parseCmdLineArgs()

    # manage the CV API key
    if opts.cv_api_key:
        if opts.cv_api_key != SETTINGS.cv_api_key:
            SETTINGS.cv_api_key = opts.cv_api_key
            SETTINGS.save()
    if opts.only_set_key:
        print("Key set")
        return

    ComicVineTalker.api_key = SETTINGS.cv_api_key

    signal.signal(signal.SIGINT, signal.SIG_DFL)

    if not qt_available and not opts.no_gui:
        opts.no_gui = True
        print("PyQt5 is not available.  ComicTagger is limited to command-line mode.", file=sys.stderr)

    if opts.no_gui:
        cli.cli_mode(opts, SETTINGS)
    else:
        os.environ['QT_AUTO_SCREEN_SCALE_FACTOR'] = '1'            
        app = QtWidgets.QApplication(sys.argv)
        if platform.system() == "Darwin":
            # Set the MacOS dock icon
            app.setWindowIcon(
            QtGui.QIcon(ComicTaggerSettings.getGraphic('app.png')))

        if platform.system() == "Windows":
            # For pure python, tell windows that we're not python,
            # so we can have our own taskbar icon
            import ctypes
            myappid = u'comictagger' # arbitrary string
            ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
            # force close of console window
            SWP_HIDEWINDOW = 0x0080
            consoleWnd = ctypes.windll.kernel32.GetConsoleWindow()
            if consoleWnd != 0:          
                ctypes.windll.user32.SetWindowPos(consoleWnd, None, 0, 0, 0, 0, SWP_HIDEWINDOW)

        if platform.system() != "Linux":
            img = QtGui.QPixmap(ComicTaggerSettings.getGraphic('tags.png'))

            splash = QtWidgets.QSplashScreen(img)
            splash.show()
            splash.raise_()
            app.processEvents()

        try:
            tagger_window = TaggerWindow(opts.file_list, SETTINGS, opts=opts)
            tagger_window.setWindowIcon(
                QtGui.QIcon(ComicTaggerSettings.getGraphic('app.png')))
            tagger_window.show()

            if platform.system() != "Linux":
                splash.finish(tagger_window)

            sys.exit(app.exec_())
        except Exception as e:
            QtWidgets.QMessageBox.critical(
                QtWidgets.QMainWindow(),
                "Error",
                "Unhandled exception in app:\n" +
                traceback.format_exc())
