<?php

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

class I24hVideoSerialInfo extends AbstractVod
{
    private $session;
    private $tv;

    public function __construct($session, $tv)
    {
        parent::__construct(
            I24hConfig::VOD_FAVORITES_SUPPORTED,
            I24hConfig::VOD_MOVIE_PAGE_SUPPORTED,
            false);
        $this->session = $session;
        $this->tv = $tv;
    }

    public function get_vod_stream_url($playback_url, &$plugin_cookies)
    {
        list($type, $season, $serie_id, $potok) = explode(";", $playback_url);

        if ($type === 'VIDEO_EPISODES_URL') {

            $url = sprintf($this->session->get_api_server() . I24hConfig::VIDEO_EPISODES_URL, $season, $serie_id, $potok, $this->session->get_token());
            try {
                $doc = $this->session->api_call($url);
            } catch (Exception $e) {
                throw new DuneException(
                    'HTTP network error', 0,
                    ActionFactory::show_error(
                        true,
                        'Ошибка связи',
                        array('Не удаётся подключиться к серверу.', 'Проверьте подключение к сети Интернет.')));
            }
            if (empty($doc->hls)){
                return 'error.jpeg';
//                throw new DuneException(
//                    'HTTP network error', 0,
//                    ActionFactory::show_error(
//                        false,
//                        'Ошибка получения ссылки на видео! 3',
//                        array('Не удаётся получить ссылку на видео.', 'Проверьте подключение к сети Интернет.')));
            }
            return strval($doc->hls);
        }

        if ($type === 'VIDEO_STREAM') {

            $url = sprintf($this->session->get_api_server() . I24hConfig::VIDEO_STREAM, $season, $potok, $this->session->get_token());
            try {
                $doc = $this->session->api_call($url);
            } catch (Exception $e) {
                throw new DuneException(
                    'HTTP network error', 0,
                    ActionFactory::show_error(
                        true,
                        'Ошибка связи',
                        array('Не удаётся подключиться к серверу.', 'Проверьте подключение к сети Интернет.')));
            }
            if (empty($doc->hls)){
                return 'error.jpeg';
//                throw new DuneException(
//                    'HTTP network error', 0,
//                ActionFactory::show_error(
//                    false,
//                    'Ошибка получения ссылки на видео! 4',
//                    array('Не удаётся получить ссылку на видео.', 'Проверьте подключение к сети Интернет.')));
            }
            return strval($doc->hls);
        }
    }

    public function try_load_movie($serial_id, &$plugin_cookies)
    {
        $this->session->ensure_logged_in($plugin_cookies);

        $url = sprintf($this->session->get_api_server() . I24hConfig::VIDEO_SERIAL, $serial_id, $this->session->get_token());
        try {
            $doc = $this->session->api_call($url);
        } catch (Exception $e) {
            throw new DuneException(
                'HTTP network error', 0,
                ActionFactory::show_error(
                    true,
                    'Ошибка связи',
                    array('Не удаётся подключиться к серверу.', 'Проверьте подключение к сети Интернет.')));
        }

        $poser = '';
        if (!empty($doc->img)) {
            foreach ($doc->img as $i) {
                if (strval($i->type) == 'cover') {
                    $cover = strval($i->src);
                } else {
                    $poster = strval($i->src);
                }
            }
        }

        $countries = array();
        foreach ($doc->countries as $c){
            $countries[] = $c->name;
        }

        $genres = array();
        foreach ($doc->genres as $c){
            $genres[] = $c->name;
        }

        $movie = new Movie(strval($doc->id));

        $movie->set_data(
            strval($doc->title),
            strval($doc->original),
            strval($doc->description),
            empty($cover) ? $poster . "?w=200&h=300&crop=true" : $cover . "?w=200&h=300&crop=true",
            '',
            strval($doc->year),
            '',
            '',
            '',
            strval(substr(implode(", ", $genres), 0)),
            $doc->rating_imdb,
            $doc->rating_kinopoisk,
            strval($doc->age),
            strval(substr(implode(", ", $countries), 0)),
            ''
        );

        $this->set_cached_movie($movie);
    }

    public function get_channel($channel_id)
    {
        $channel = $this->tv->get_channel($channel_id);
        return $channel;
    }

    protected function load_favorites(&$plugin_cookies)
    {
        $fav_movie_ids = $this->get_fav_movie_ids_from_cookies($plugin_cookies);
        foreach ($fav_movie_ids as $movie_id) {
            if ($this->has_cached_short_movie($movie_id))
                continue;
            $this->ensure_movie_loaded($movie_id, $plugin_cookies);
        }
        $this->set_fav_movie_ids($fav_movie_ids);
    }

    protected function do_save_favorite_movies(&$fav_movie_ids, &$plugin_cookies)
    {
        $this->set_fav_movie_ids_to_cookies($plugin_cookies, $fav_movie_ids);
    }

    public function get_fav_movie_ids_from_cookies(&$plugin_cookies)
    {
        if (!isset($plugin_cookies->{'favorite_movies'}))
            return array();

        $arr = preg_split('/,/', $plugin_cookies->{'favorite_movies'});

        $ids = array();
        foreach ($arr as $id) {
            if (preg_match('/\S/', $id))
                $ids[] = $id;
        }
        return $ids;
    }

    public function set_fav_movie_ids_to_cookies(&$plugin_cookies, &$ids)
    {
        $plugin_cookies->{'favorite_movies'} = join(',', $ids);
    }

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

    public function get_vod_list_folder_views()
    {
        return I24hConfig::GET_VOD_MOVIE_LIST_FOLDER_VIEWS();
    }
}

?>
