# -*- coding: utf-8 -*-
"""Compatibility entry points: providers describe an item, the shared menu renders it."""
from wcs.skin import context


def _video(kind, identity, title='', season=None, episode=None, extras=None):
    data = {'type': kind, 'title': str(title or ''), 's': season, 'e': episode}
    if str(identity or '').isdigit():
        data['tmdb'] = str(identity)
    if extras:
        data['extras'] = context.encode(extras)
    return context.entry(data)


def create_movie_context_menu(addon, tmdb_id, title, year, plot, poster, is_in_my_movies=False, original_title=None):
    extras = None
    if not str(tmdb_id or '').isdigit():
        extras = {'play': (context.text(32377), context.builtin({'action': 'play_movie_from_addon',
                          'title': title or '', 'year': year or '', 'plot': plot or '', 'poster': poster or ''}))}
    return _video('movie', tmdb_id, title, extras=extras)


def create_my_movies_context_menu(addon, tmdb_id, title, year=None, plot=None, poster=None, idx=None):
    return create_movie_context_menu(addon, tmdb_id, title, year, plot, poster)


def create_series_context_menu(addon, tmdb_id, name, year=None, plot=None, poster=None, is_in_my_series=False, original_name=None):
    return _video('tv', tmdb_id, name)


def create_my_series_context_menu(addon, tmdb_id, name, plot=None, poster=None, idx=None):
    return create_series_context_menu(addon, tmdb_id, name, plot=plot, poster=poster)


def create_episode_context_menu(addon, series_tmdb_id, series_name, episode_title, season_number, episode_number, plot=None, poster=None):
    return _video('episode', series_tmdb_id, series_name, season_number, episode_number)


def _person(role, identity, name, biography, poster):
    return context.entry({'type': 'person', 'role': role, 'id': str(identity), 'title': name or '',
                          'plot': biography or '', 'poster': poster or ''})


def create_favorite_actor_context_menu(addon, actor_id, name, biography=None, profile_url=None, idx=None):
    return _person('actor', actor_id, name, biography, profile_url)


def create_favorite_director_context_menu(addon, director_id, name, biography=None, profile_url=None, idx=None):
    return _person('director', director_id, name, biography, profile_url)


def create_favorite_writer_context_menu(addon, writer_id, name, biography=None, profile_url=None, idx=None):
    return _person('writer', writer_id, name, biography, profile_url)


def create_recently_played_context_menu(addon, idx=None, media_type=None, series_name=None, season=None, episode=None, year=None, poster=None, tmdb_id=None):
    kind = 'episode' if media_type == 'series' else 'movie'
    extras = {}
    if idx is not None:
        extras['history'] = (context.text(32728), context.builtin({'action': 'remove_recently_played_item', 'idx': idx}))
    if media_type == 'series' and series_name and season is not None and episode is not None:
        extras['next'] = (context.text(32383), context.builtin({'action': 'play_next_episode_with_metadata',
                         'series_name': series_name, 'current_season': season, 'current_episode': episode,
                         'tmdb_id': tmdb_id or ''}))
    return _video(kind, tmdb_id, series_name, season, episode, extras)
