<?php
///////////////////////////////////////////////////////////////////////////

require_once 'lib/vod/abstract_vod.php';
require_once 'lib/vod/movie.php';

///////////////////////////////////////////////////////////////////////////

class IptvVod extends AbstractVod
{
    private $session;

    public function __construct($session)
    {
        $this->session = $session;

        parent::__construct(true, true, false);
    }

    ///////////////////////////////////////////////////////////////////////

    public function get_vod_info(MediaURL $media_url, &$plugin_cookies)
    {
        $this->session->ensure_logged_in($plugin_cookies);

        return parent::get_vod_info($media_url, $plugin_cookies);
    }

    public function try_load_movie($movie_id, &$plugin_cookies)
    {
        $movie = $this->session->api_vod_info($movie_id);

        $this->set_cached_movie($movie);
    }

    public function get_vod_stream_url($playback_url, &$plugin_cookies)
    {
        return $this->session->api_get_stream_url($playback_url);
    }

    public function get_buffering_ms()
    {
        $this->session->check_logged_in();

        $settings = $this->session->get_settings();
        return $settings->http_caching->value;
    }

    ///////////////////////////////////////////////////////////////////////
    // Favorites.


    public function load_favorites(&$plugin_cookies)
    {
        return $this->session->api_vod_favlist();
    }

    protected function do_add_favorite_movie($movie_id, &$plugin_cookies)
    {
        $this->session->fav_api_vod_add($movie_id);
    }

    protected function do_remove_favorite_movie($movie_id, &$plugin_cookies)
    {
        $this->session->api_vod_favsub($movie_id);
    }

    ///////////////////////////////////////////////////////////////////////
    // Genres.

    protected function load_genres(&$plugin_cookies)
    {
        $doc = $this->session->api_vod_genres();

        $genres = array();
        foreach ($doc->genres as $genre)
            $genres[$genre->id] = $genre->name;

        return $genres;
    }

    public function get_genre_icon_url($genre_id)
    {
        return $this->session->get_genre_icon('cat_' . $genre_id . '.png');
    }

    public function get_genre_media_url_str($genre_id)
    {
        return IptvVodListScreen::get_media_url_str('genres', $genre_id);
    }

    public function get_genre_and_year_media_url_str($genre_id, $year)
    {
        return IptvVodListScreen::get_media_url_str('genres', $genre_id, 'year', $year);
    }

    ///////////////////////////////////////////////////////////////////////
    // Categories.

    protected function load_categories(&$plugin_cookies)
    {
        $doc = $this->session->api_vod_categories();

        $categories = array();
        foreach ($doc->categories as $category)
            $categories[$category->id] = $category->category_name;

        return $categories;
    }

    public function get_category_icon_url($category_id)
    {
        return $this->session->get_category_icon('category_' . $category_id . '.png');
    }

    public function get_category_media_url_str($category_id)
    {
        return IptvVodListScreen::get_media_url_str('categories', $category_id);
    }

    ///////////////////////////////////////////////////////////////////////
    // Decades.

    protected function load_decades(&$plugin_cookies)
    {
        $doc = $this->session->api_vod_decades();

        $decades = array();
        foreach ($doc as $decade => $years)
            foreach ($years->years as $year => $value)
                $decades[$decade]['years'][$year] = '';

        return $decades;
    }

    public function get_decades_media_url_str($decade)
    {
        return VodYearsScreen::get_media_url_str('decade', $decade);
    }

    ///////////////////////////////////////////////////////////////////////
    // Years.

    public function get_years_media_url_str($year)
    {
       # return IptvVodListScreen::get_media_url_str('year', $year);
        return VodGenresScreen::get_media_url_str('year', $year);
    }

    ///////////////////////////////////////////////////////////////////////
    // Search.

    public function get_search_media_url_str($pattern)
    {
        return IptvVodListScreen::get_media_url_str('search', $pattern);
    }

    ///////////////////////////////////////////////////////////////////////
    // Folder views.

    public function get_vod_decades_folder_views()
    {
        return array(
            array
            (
                PluginRegularFolderView::async_icon_loading => false,

                PluginRegularFolderView::view_params => array
                (
                    ViewParams::num_cols => 4,
                    ViewParams::num_rows => 10,
#                    ViewParams::content_box_padding_bottom => 110,
                ),

                PluginRegularFolderView::base_view_item_params => array
                (
                    ViewItemParams::item_padding_top => 15,
                    ViewItemParams::item_padding_bottom => 15,
                    ViewItemParams::icon_valign => VALIGN_CENTER,
                    ViewItemParams::item_layout => HALIGN_CENTER,
                    ViewItemParams::item_caption_width => 365,
                    ViewItemParams::icon_dx => 65,
                ),

                PluginRegularFolderView::not_loaded_view_item_params => array
                (
                    ViewItemParams::icon_path => 'missing://',
                ),
            ));
    }

    public function get_vod_years_folder_views()
    {
        return $this->get_vod_decades_folder_views();
    }

    public function get_vod_genres_folder_views()
    {
        $mov_genre_default_icon_url =
            $this->session->get_icon('mov_genre_default.png');

        return array(
            array
            (
                PluginRegularFolderView::async_icon_loading => true,

                PluginRegularFolderView::view_params => array
                (
                    ViewParams::num_cols => 5,
                    ViewParams::num_rows => 4,
                    ViewParams::icon_selection_box_width => 294,
                    ViewParams::icon_selection_box_height => 162,
                    ViewParams::icon_selection_box_dy => -78,
                ),

                PluginRegularFolderView::base_view_item_params => array
                (
                    ViewItemParams::item_padding_top => 0,
                    ViewItemParams::item_padding_bottom => 0,
                    ViewItemParams::icon_valign => VALIGN_CENTER,
                    ViewItemParams::item_paint_caption => false,
                    ViewItemParams::icon_scale_factor => 1.0,
                    ViewItemParams::icon_sel_scale_factor => 1.2,
                ),

                PluginRegularFolderView::not_loaded_view_item_params => array
                (
                    ViewItemParams::icon_path => $mov_genre_default_icon_url,
                    ViewItemParams::item_paint_caption_within_icon => true,
                    ViewItemParams::item_caption_within_icon_color => 'black',
                ),
            ));
    }

    public function get_vod_categories_folder_views()
    {
        return array(
            array
            (
                PluginRegularFolderView::async_icon_loading => false,

                PluginRegularFolderView::view_params => array
                (
                    ViewParams::num_cols => 4,
                    ViewParams::num_rows => 10,
                ),

                PluginRegularFolderView::base_view_item_params => array
                (
                    ViewItemParams::item_padding_top => 15,
                    ViewItemParams::item_padding_bottom => 15,
                    ViewItemParams::icon_valign => VALIGN_CENTER,
                    ViewItemParams::item_layout => HALIGN_CENTER,
                    ViewItemParams::item_caption_width => 365,
                    ViewItemParams::icon_dx => 65,
                ),

                PluginRegularFolderView::not_loaded_view_item_params => array
                (
                    ViewItemParams::icon_path => 'missing://',
                ),
            ));
    }

    public function get_vod_list_folder_views()
    {
        $mov_unset_url = $this->session->get_icon('mov_unset.png');

        return array(
            array
            (
                PluginRegularFolderView::async_icon_loading => true,

                PluginRegularFolderView::view_params => array
                (
                    ViewParams::num_cols => 6,
                    ViewParams::num_rows => 3,
                    ViewParams::icon_selection_box_width => 150,
                    ViewParams::icon_selection_box_height => 222,
                    ViewParams::paint_details => true,
                    ViewParams::zoom_detailed_icon => true,
                ),

                PluginRegularFolderView::base_view_item_params => array
                (
                    ViewItemParams::item_padding_top => 0,
                    ViewItemParams::item_padding_bottom => 0,
                    ViewItemParams::icon_valign => VALIGN_CENTER,
                    ViewItemParams::item_paint_caption => false,
                    ViewItemParams::icon_scale_factor => 0.35,
                    ViewItemParams::icon_sel_scale_factor => 0.4,
                ),

                PluginRegularFolderView::not_loaded_view_item_params => array
                (
                    ViewItemParams::icon_path => $mov_unset_url,
                    ViewItemParams::item_detailed_icon_path => 'missing://',
                ),
            ));
    }

    public function get_archive(MediaURL $media_url)
    {
        return $this->session->get_archive();
    }

    public function folder_entered(MediaURL $media_url, &$plugin_cookies)
    {
        $this->session->ensure_logged_in($plugin_cookies);
    }
}

///////////////////////////////////////////////////////////////////////////
?>
