# -*- coding: utf-8 -*-

#################################################################################################

import logging

import xbmc

from helper import _, settings, dialog, JSONRPC, compare_version

#################################################################################################

LOG = logging.getLogger("JELLYFIN."+__name__)

#################################################################################################


class Setup(object):

    def __init__(self):

        self.set_web_server()
        self.setup()

        LOG.info("---<[ setup ]")

    def set_web_server(self):

        ''' Enable the webserver if not enabled. This is used to cache artwork.
            Will only test once, if it fails, user will be notified only once.
        '''
        if settings('enableTextureCache.bool'):

            get_setting = JSONRPC('Settings.GetSettingValue')

            if not self.get_web_server():

                set_setting = JSONRPC('Settings.SetSetingValue')
                set_setting.execute({'setting': "services.webserverport", 'value': 8080})
                set_setting.execute({'setting': "services.webserver", 'value': True})

                if not self.get_web_server():

                    settings('enableTextureCache.bool', False)
                    dialog("ok", heading="{jellyfin}", line1=_(33103))
                    
                    return

            result = get_setting.execute({'setting': "services.webserverport"})
            settings('webServerPort', str(result['result']['value'] or ""))
            result = get_setting.execute({'setting': "services.webserverusername"})
            settings('webServerUser', str(result['result']['value'] or ""))
            result = get_setting.execute({'setting': "services.webserverpassword"})
            settings('webServerPass', str(result['result']['value'] or ""))
            settings('useWebServer.bool', True)

    def get_web_server(self):

        result = JSONRPC('Settings.GetSettingValue').execute({'setting': "services.webserver"})

        try:
            return result['result']['value']
        except (KeyError, TypeError):
            return False

    def setup(self):

        minimum = "3.0.24"
        cached = settings('MinimumSetup')

        if cached == minimum:
            return

        if not cached:

            self._is_mode()
            LOG.info("Add-on playback: %s", settings('useDirectPaths') == "0")
            self._is_artwork_caching()
            LOG.info("Artwork caching: %s", settings('enableTextureCache.bool'))
            self._is_empty_shows()
            LOG.info("Sync empty shows: %s", settings('syncEmptyShows.bool'))
            self._is_rotten_tomatoes()
            LOG.info("Sync rotten tomatoes: %s", settings('syncRottenTomatoes.bool'))

        """
        if compare_version(cached or minimum, "3.0.24") <= 0:

            self._is_rotten_tomatoes()
            LOG.info("Sync rotten tomatoes: %s", settings('syncRottenTomatoes.bool'))
        """

        # Setup completed
        settings('MinimumSetup', minimum)

    def _is_mode(self):

        ''' Setup playback mode. If native mode selected, check network credentials.
        '''
        value = dialog("yesno",
                       heading=_('playback_mode'),
                       line1=_(33035),
                       nolabel=_('addon_mode'),
                       yeslabel=_('native_mode'))

        settings('useDirectPaths', value="1" if value else "0")

        if value:
            dialog("ok", heading="{jellyfin}", line1=_(33145))

    def _is_artwork_caching(self):

        value = dialog("yesno", heading="{jellyfin}", line1=_(33117))
        settings('enableTextureCache.bool', value)

    def _is_empty_shows(self):

        value = dialog("yesno", heading="{jellyfin}", line1=_(33100))
        settings('syncEmptyShows.bool', value)

    def _is_rotten_tomatoes(self):

        value = dialog("yesno", heading="{jellyfin}", line1=_(33188))
        settings('syncRottenTomatoes.bool', value)

    def _is_music(self):

        value = dialog("yesno", heading="{jellyfin}", line1=_(33039))
        settings('enableMusic.bool', value=value)