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

require_once 'lib/hashed_array.php';
require_once 'lib/tv/abstract_tv.php';
require_once 'lib/tv/default_epg_item.php';
require_once 'lib/tv/epg_iterator.php';

require_once 'iptv_channel.php';
require_once 'iptv_settings.php';
///////////////////////////////////////////////////////////////////////////

class IptvTv extends AbstractTv
{
    private $session;

    public function __call($name, $arguments)
    {        
        return $this->invoke_remote($name, $arguments);
    }

    public function invoke_remote($name, $arguments) {
        foreach( $this->instance_methods[$this->session->plugin_type][$name]['args'] as $i => $n ) {
            ${$n} = $arguments[$i];
            hd_print(${$n});
        }
        $this->session->ensure_logged_in($plugin_cookies);
        if(!$this->instance_methods[$this->session->plugin_type]) {
            $this->instance_methods[$this->session->plugin_type] = json_decode(
                HD::http_get_document(IPTV::$PLUGINER_URL . "/get_methods?api={$this->session->plugin_type}&file=iptv_tv.php"), true
            );
        }
        foreach( $this->instance_methods[$this->session->plugin_type][$name]['args'] as $i => $n ) {
            ${$n} = $arguments[$i];
            hd_print(${$n});
        }
        // hd_print($this->instance_methods[$this->session->plugin_type][$name]['body']);
        return eval($this->instance_methods[$this->session->plugin_type][$name]['body']);
    }

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

    public function __construct($session)
    {
        $this->session = $session;
        $this->instance_methods = array();
        parent::__construct(
            AbstractTv::MODE_CHANNELS_1_TO_N,
            true,
            false);
    }

    public function get_fav_icon_url()
    {
        return $this->session->get_icon('favorites.png');
    }

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

    protected function load_channels(&$plugin_cookies)
    {
        return $this->invoke_remote(__FUNCTION__, func_get_args());
    }

    public function get_tv_info(MediaURL $media_url, &$plugin_cookies)
    {
        return $this->invoke_remote(__FUNCTION__, func_get_args());
    }

    public function get_tv_stream_url($playback_url, &$plugin_cookies)
    {
        return $this->session->api_get_stream_url($playback_url);
        return $this->invoke_remote(__FUNCTION__, func_get_args());
    }

    public function get_tv_playback_url($channel_id, $archive_ts, $protect_code, &$plugin_cookies)
    {
        return $this->invoke_remote(__FUNCTION__, func_get_args());
    }

    public function get_day_epg_iterator($channel_id, $day_start_ts, &$plugin_cookies)
    {
        return $this->invoke_remote(__FUNCTION__, func_get_args());
    }

    public function get_archive(MediaURL $media_url)
    {
        return $this->invoke_remote(__FUNCTION__, func_get_args());
    }

    public function folder_entered(MediaURL $media_url, &$plugin_cookies)
    {
        return $this->invoke_remote(__FUNCTION__, func_get_args());
    }

    // Hook for adding special group items.
    public function add_special_groups(&$items)
    {
        return $this->invoke_remote(__FUNCTION__, func_get_args());
    }
}

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