import sys
import xbmc
import xbmcgui
import xbmcaddon

from resources.lib.Utils import *

ADDON = xbmcaddon.Addon()
ADDON_VERSION = ADDON.getAddonInfo('version')
ADDON_LANGUAGE = ADDON.getLocalizedString
ADDON_PATH = ADDON.getAddonInfo('path').decode("utf-8")
EXTRAFANART_LIMIT = 4
EXTRATHUMB_LIMIT = 4
HOME = xbmcgui.Window(10000)


class Main:

    def __init__(self):
        log("version %s started" % ADDON_VERSION)
        xbmc.executebuiltin('SetProperty(toolbox_running,True,home)')
        self._init_vars()
        self._parse_argv()
        if self.infos:
            self.StartInfoActions(self.infos, self.params)
        elif not len(sys.argv) > 1:
            self.selection_dialog()
        xbmc.executebuiltin('ClearProperty(toolbox_running,home)')
        while self.params.get("daemon", False) and not xbmc.abortRequested:
            self.image_now = xbmc.getInfoLabel("Player.Art(thumb)")
            if self.image_now != self.image_prev:
                self.image_prev = self.image_now
                image, imagecolor = Filter_Image(self.image_now, int(self.params.get("radius", 5)))
                HOME.setProperty(self.params.get("prefix", "") + 'ImageFilter', image)
                HOME.setProperty(self.params.get("prefix", "") + "ImageColor", imagecolor)
            else:
                xbmc.sleep(300)

    def StartInfoActions(self, infos, params):
        prettyprint(params)
        prettyprint(infos)
        for info in self.infos:
            if info == 'playmovie':
                xbmc.executeJSONRPC('{ "jsonrpc": "2.0", "method": "Player.Open", "params": { "item": { "movieid": %i }, "options":{ "resume": %s } }, "id": 1 }' % (int(params["dbid"]), self.resume))
            elif info == 'playepisode':
                xbmc.executeJSONRPC('{ "jsonrpc": "2.0", "method": "Player.Open", "params": { "item": { "episodeid": %i }, "options":{ "resume": %s }  }, "id": 1 }' % (int(params["dbid"]), self.resume))
            elif info == 'playmusicvideo':
                xbmc.executeJSONRPC('{ "jsonrpc": "2.0", "method": "Player.Open", "params": { "item": { "musicvideoid": %i } }, "id": 1 }' % int(params["dbid"]))
            elif info == 'playalbum':
                xbmc.executeJSONRPC('{ "jsonrpc": "2.0", "method": "Player.Open", "params": { "item": { "albumid": %i } }, "id": 1 }' % int(params["dbid"]))
            elif info == 'playsong':
                xbmc.executeJSONRPC('{ "jsonrpc": "2.0", "method": "Player.Open", "params": { "item": { "songid": %i } }, "id": 1 }' % int(params["dbid"]))
            elif info == 'favourites':
                if params.get("id"):
                    favourites = GetFavouriteswithType(params["id"])
                else:
                    favourites = GetFavourites()
                    HOME.setProperty('favourite.count', str(len(favourites)))
                    if len(favourites) > 0:
                        HOME.setProperty('favourite.1.name', favourites[-1]["Label"])
                passDataToSkin('Favourites', favourites, params.get("prefix", ""), self.window)
            elif info == 'selectdialog':
                CreateDialogSelect(params.get("header"))
            elif info == 'exportskinsettings':
                export_skinsettings(params.get("text"))
            elif info == 'importskinsettings':
                import_skinsettings()
            elif info == 'extrathumbmovie':
                AddArtToLibrary("extrathumb", "Movie", "extrathumbs", EXTRATHUMB_LIMIT)
            elif info == 'extrafanartmovie':
                AddArtToLibrary("extrafanart", "Movie", "extrafanart", EXTRAFANART_LIMIT)
            elif info == 'extrafanarttvshow':
                AddArtToLibrary("extrafanart", "TVShow", "extrafanart", EXTRAFANART_LIMIT)
            elif info == 'okdialog':
                CreateDialogOK(params.get("header"), params.get("text"))
            elif info == 'builtin':
                xbmc.executebuiltin(params.get("id", ""))
            elif info == 'yesnodialog':
                CreateDialogYesNo(params.get("header"), params.get("text"), params.get("nolabel", ""), params.get("yeslabel", ""), params.get("noaction"), params.get("yesaction", ""))
            elif info == 'notification':
                CreateNotification(params.get("header"), params.get("text"), params.get("icon", xbmcgui.NOTIFICATION_INFO), int(params.get("time", 5000)), params.get("sound", True))
            elif info == 'textviewer':
                xbmcgui.Dialog().textviewer(heading=remove_quotes(params.get("header")),
                                            text=remove_quotes(params.get("text")))
            elif info == "infopanel":
                open_info_panel()
            elif info == "sortletters":
                listitems = GetSortLetters(self.path, params.get("id", ""))
                passDataToSkin('SortLetters', listitems, params.get("prefix", ""), self.window)
            elif info == 'jumptoletter':
                JumpToLetter(params.get("id", ""))
            elif info == 'blur':
                HOME.clearProperty(params.get("prefix", "") + 'ImageFilter')
                log("Blur image %s with radius %i" % (params.get("id", ""), int(params.get("radius", 5))))
                image, imagecolor = Filter_Image(params.get("id", ""), int(params.get("radius", 5)))
                HOME.setProperty(params.get("prefix", "") + 'ImageFilter', image)
                HOME.setProperty(params.get("prefix", "") + "ImageColor", imagecolor)

    def _init_vars(self):
        self.window = xbmcgui.Window(10000)  # Home Window
        self.resume = "false"
        self.image_now = ""
        self.image_prev = ""
        self.params = {}

    def _parse_argv(self):
        args = sys.argv
        self.infos = []
        for arg in args:
            if arg == 'script.toolbox':
                continue
            if arg.startswith('info='):
                self.infos.append(arg[5:])
            else:
                try:
                    self.params[arg.split("=")[0].lower()] = "=".join(arg.split("=")[1:])
                except:
                    pass

    def selection_dialog(self):
        modeselect = [ADDON_LANGUAGE(32001), ADDON_LANGUAGE(32002), ADDON_LANGUAGE(32003),
                      ADDON_LANGUAGE(32014), ADDON_LANGUAGE(32015), ADDON_LANGUAGE(32018), ADDON_LANGUAGE(32017)]
        dialogSelection = xbmcgui.Dialog()
        selection = dialogSelection.select(ADDON_LANGUAGE(32004), modeselect)
        if selection == 0:
            export_skinsettings()
        elif selection == 1:
            import_skinsettings()
        elif selection == 2:
            xbmc.executebuiltin("Skin.ResetSettings")
        elif selection == 3:
            AddArtToLibrary("extrathumb", "Movie", "extrathumbs", EXTRATHUMB_LIMIT)
        elif selection == 4:
            AddArtToLibrary("extrafanart", "Movie", "extrafanart", EXTRAFANART_LIMIT)
        # elif selection == 5:
        # AddArtToLibrary("extrathumb","TVShow", "extrathumbs")
        elif selection == 5:
            AddArtToLibrary("extrafanart", "TVShow", "extrafanart", EXTRAFANART_LIMIT)
        elif selection == 6:
            AddArtToLibrary("extrathumb", "Movie", "extrathumbs", EXTRATHUMB_LIMIT)
            AddArtToLibrary("extrafanart", "Movie", "extrafanart", EXTRAFANART_LIMIT)
            AddArtToLibrary("extrafanart", "TVShow", "extrafanart", EXTRAFANART_LIMIT)


if __name__ == "__main__":
    Main()
log('finished')