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

require_once 'lib/abstract_controls_screen.php';

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

class IptvSetupScreen extends AbstractControlsScreen
{
    const ID = 'setup';

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

    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_setup_screen.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(self::ID);
    }

    public function get_control_defs(MediaURL $media_url, &$plugin_cookies)
    {
        try
        {
            if (!$this->session->is_login_incorrect())
                $this->session->ensure_logged_in($plugin_cookies);
        }
        catch (Exception $e)
        {
            // Nop.
        }

        return $this->do_get_control_defs($plugin_cookies);
    }

    public function handle_user_input(&$user_input, &$plugin_cookies)
    {
        return $this->invoke_remote(__FUNCTION__, func_get_args());
    }
}

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