# -*- coding: utf-8 -*-
"""Router actions used by skin.milionar (docs/plan/skin-milionar 050, 070, 080): browse, game, search, resume."""
import json
import random
from urllib.parse import quote_plus

import xbmc
import xbmcgui
import xbmcplugin

ADDON_ID = 'plugin.video.milionar'
BASE = 'plugin://{}/'.format(ADDON_ID)

BROWSE_ENTRIES = (
    ('TMDb filmy', 'tmdb_movies'), ('TMDb seriály', 'tmdb_series'),
    ('ČSFD filmy', 'csfd_movies_menu'), ('ČSFD seriály', 'csfd_series_menu'),
    ('Oblíbení herci', 'favorite_actors'), ('Oblíbení režiséři', 'favorite_directors'),
    ('Oblíbení scenáristé', 'favorite_writers'),
)


def _rpc(method, params):
    return json.loads(xbmc.executeJSONRPC(json.dumps(
        {'jsonrpc': '2.0', 'id': 1, 'method': method, 'params': params}))).get('result', {})


def browse(handle):
    """Folder listing behind the TMDb / ČSFD Home item: entry points of the addon's data sources."""
    for label, action in BROWSE_ENTRIES:
        item = xbmcgui.ListItem(label=label)
        item.setArt({'icon': 'DefaultFolder.png'})
        xbmcplugin.addDirectoryItem(handle, '{}?action={}'.format(BASE, action), item, True)
    xbmcplugin.endOfDirectory(handle)


def resume(params):
    """Resume a library movie/episode from Kodi's own bookmark (so the .strm goes through normal playback)."""
    dbtype, dbid = params.get('dbtype'), params.get('dbid')
    if dbtype not in ('movie', 'episode') or not str(dbid).isdigit():
        return
    _rpc('Player.Open', {'item': {dbtype + 'id': int(dbid)}, 'options': {'resume': True}})


def search(addon, params=None):
    """Skin search button / "new search" / history entry (docs/plan/skin-milionar/070)."""
    from wcs.skin import search as skin_search
    skin_search.run(addon, params or {})


def _library_titles(topic):
    """Titles of My movies / My series (the addon's own lists; skin.milionar never reads the Kodi library), by title."""
    from wcs.library2 import rows
    data = rows.Data()
    media = 'tv' if topic == 'tvshow' else 'movie'
    ids = data.list_ids(media)
    if media == 'tv':
        data.preload_series(ids)
    found = []
    for tmdb_id in ids:
        card = rows.series_card(data, tmdb_id) if media == 'tv' else rows.movie_card(data, tmdb_id)
        found.append({'title': card['title'], 'year': card['year'], 'plot': card['plot'], 'media_type': media,
                      'art': {'poster': card['poster'], 'fanart': card['fanart']}, 'uniqueid': {'tmdb': str(tmdb_id)}})
    return sorted(found, key=lambda row: row['title'].lower())


def _start_game(row):
    from wcs.games import millionaire
    art = row.get('art', {})
    tmdb_id = (row.get('uniqueid') or {}).get('tmdb', '')
    millionaire.start(millionaire.Subject(title=row.get('title', ''), tmdb_id=str(tmdb_id),
                                          media_type=row['media_type'], plot=row.get('plot', ''),
                                          year=row.get('year') or '', poster=art.get('poster', ''),
                                          backdrop=art.get('fanart', '')))


def game(addon, params):
    """Milionář topic picker result: pick a library movie/show (or a random one) and start the game."""
    topic = params.get('topic', 'random')
    if topic == 'random':
        rows = _library_titles('movie') + _library_titles('tvshow')
        if not rows:
            xbmcgui.Dialog().notification('Milionář', addon.getLocalizedString(32235), xbmcgui.NOTIFICATION_INFO)
            return
        _start_game(random.choice(rows))
        return
    rows = _library_titles(topic)
    if not rows:
        xbmcgui.Dialog().notification('Milionář', addon.getLocalizedString(32235), xbmcgui.NOTIFICATION_INFO)
        return
    entries = []
    for row in rows:
        entry = xbmcgui.ListItem(label=row.get('title', ''), label2=str(row.get('year') or ''))
        entry.setArt({'thumb': (row.get('art') or {}).get('poster', '')})
        entries.append(entry)
    picked = xbmcgui.Dialog().select(addon.getLocalizedString(32236), entries, useDetails=True)
    if picked >= 0:
        _start_game(rows[picked])


def set_provider_properties(addon):
    """Window(Home) properties the skin uses to hide items of unconfigured providers (050 §2)."""
    home = xbmcgui.Window(10000)
    from wcs.provider_keys import ai_available
    home.setProperty('milionar.provider.kraska', '1' if addon.getSetting('sc_auth_token') else '')
    ai = ai_available(addon)
    home.setProperty('milionar.provider.ai', '1' if ai else '')
    from wcs.provider_keys import write_flags
    write_flags({'ai': ai})
    home.setProperty('milionar.provider.webshare', '1' if addon.getSetting('wsuser') else '')
