<?php

require_once 'lib/abstract_controls_screen.php';

class I24hSetupScreen extends AbstractControlsScreen
{
    const ID = 'setup';
    private $session;
    private $plugin;

    public function __construct($plugin, $session)
    {
        parent::__construct(self::ID);
        $this->session = $session;
        $this->plugin = $plugin;
    }

    public function get_handler_id(){
        return self::ID;
    }

    public static function get_media_url_str($pin)
    {
        return MediaURL::encode(
            array('screen_id' => self::ID, 'pin' => $pin));
    }

    public function do_get_parent_control_defs($defs)
    {
        $pin_control = '';
        $this->add_text_field($defs,
            'pin_control', 'Пароль родительского контроля:',
            $pin_control, 1, 1, 0, 1, 500, 0, true);

        return $defs;
    }


    public function do_get_pin_control_defs(&$plugin_cookies)
    {
        $defs = array();
        $pin1 = '';
        $pin2 = '';
        if ($this->session->get_parental_code() != '0000') {
            $this->add_text_field($defs,
                'pin1', 'Текущий код:',
                $pin1, 1, 1, 0, 1, 500, 0, false);
        }
        $this->add_text_field($defs,
            'pin2', 'Новый код (4 цифры):',
            $pin2, 1, 1, 0, 1, 500, 0, false);

        $need_password_sextv = isset($plugin_cookies->need_password_sextv) ?
            $plugin_cookies->need_password_sextv : 'no';

        $this->add_combobox($defs,
            'password_for_sextv', 'Блокировать телеканалы для взрослых',
            $need_password_sextv, array("yes"=>"Да","no"=>"Нет"), 0, true);

        $need_password_tariff = isset($plugin_cookies->need_password_tariff) ?
            $plugin_cookies->need_password_tariff : 'no';

        $this->add_combobox($defs,
            'password_for_tariff', 'Блокировать управление тарифами',
            $need_password_tariff, array("yes"=>"Да","no"=>"Нет"), 0, true);

        $pin_apply = UserInputHandlerRegistry::create_action($this, 'pin_apply', array('action_type'=>'close_window'));
        ControlFactory::add_custom_close_dialog_and_apply_buffon($defs,'pin_apply', 'ОК', 300, $pin_apply);

        return $defs;
    }

    public function do_get_pin_error_defs(&$plugin_cookies){
        $defs = array();
        $this->add_label($defs, null,'Код родительсткого контроля должен быть из 4 цифр!');
        $pin_apply = UserInputHandlerRegistry::create_action($this, 'retry_pin', array('action_type'=>'get_password'));
        ControlFactory::add_custom_close_dialog_and_apply_buffon($defs,'retry_pin', 'ОК', 300, $pin_apply);
        return $defs;
    }


    public function do_get_control_defs(&$plugin_cookies)
    {
        $defs = array();
        $user_name = isset($plugin_cookies->user_name) ?
            $plugin_cookies->user_name : '';

        $logged_in = $this->session->is_logged_in();

        $show_tv = isset($plugin_cookies->show_tv) ?
            $plugin_cookies->show_tv : 'yes';
        $show_vod = isset($plugin_cookies->show_vod) ?
            $plugin_cookies->show_vod : 'yes';

        if (I24HSettings::$SHOW_DOGOVOD_AFERTA) {
            $this->add_button($defs, 'show_agreement', 'Пользовательское соглашение', 'Показать', 500);
            $this->add_button($defs, 'show_terms', 'Правила пользования сервисом', 'Показать', 0);
            $this->add_vgap($defs, 20);
        }

        $this->add_button($defs, 'do_unregistring', I24HSettings::get_setup_user_name($this->session), 'Отвязать', 0);

        $this->add_vgap($defs,20);
        $this->add_button($defs,'edit_tariff','Управление тарифами','Изменить',0);
        $this->add_button($defs,'get_password','Родительский контроль','Настроить',0);
        $this->add_vgap($defs,20);

        $streams_ops = array();
        $streams_ops['local'] = 'Наилучшее';
        $streams_ops['local_low'] = 'Хорошее';
        $streams_ops['hls'] = 'Авто';

        $stream_type = isset($plugin_cookies->stream_type) ? $plugin_cookies->stream_type : 'udp';
        
        $this->add_combobox($defs,
            'stream_type', 'Качество картинки',
            $stream_type, $streams_ops, 0, true);

        $show_ops = array();
        $show_ops['yes'] = 'Да';
        $show_ops['no'] = 'Нет';

        $this->add_combobox($defs,
            'show_tv', 'Показывать иконку в разделе ТВ',
            $show_tv, $show_ops, 0, true);

//        $this->add_vgap($defs,30);

        $this->add_label($defs,'IP адрес устройства',$this->session->get_ip_address()." (".$this->session->get_provider_name().")");
        $sup_phone = $this->session->get_support_phone();
        $sup_url   = $this->session->get_support_url();
        $sup_email = $this->session->get_support_email();

        $this->add_vgap($defs,-15);

        $ar = array();
        if (!empty($sup_phone)) $ar[] = $sup_phone;
        if (!empty($sup_url)) $ar[] = $sup_url;
        if (!empty($sup_email)) $ar[] = $sup_email;
        $supp_text = implode(", ", $ar);
        if (I24HSettings::$SHOW_DOGOVOD_AFERTA) {
            $this->add_label($defs, 'Техническая подержка', $supp_text);
        }else{
            $this->add_label($defs, 'Техническая подержка', $sup_phone);
            $this->add_vgap($defs,-15);
            $this->add_label($defs, '', $sup_url);
            $this->add_vgap($defs,-15);
            $this->add_label($defs, '', $sup_email);
        }

        $this->add_vgap($defs,-15);

        $this->add_label($defs,'Версия приложения',I24HSettings::get_version());



        return $defs;
    }

    public function get_control_defs(MediaURL $media_url, &$plugin_cookies)
    {
        return $this->do_get_control_defs($plugin_cookies);

    }

    public function handle_user_input(&$user_input, &$plugin_cookies)
    {

        $need_close_dialog = false;
        $need_reset_controls = false;
        $post_action = null;

        if ($user_input->action_type === 'apply')
        {
            $control_id = $user_input->control_id;

            if ($control_id === 'do_unregistring') {
                $defs = array();

                $this->add_close_dialog_and_apply_button($defs, 'change_subscriber', 'Да', 250);
                $this->add_close_dialog_button($defs, 'Нет', 250);
                return ActionFactory::show_dialog("Вы уверены, что хотите отвязать учетную запись?", $defs, true);
            }

            else if ($control_id === 'change_subscriber') {

                if ($this->session->delete_device($this->session->get_device_id($plugin_cookies))){
                        $this->session->unset_login();
                        $this->session->logout($plugin_cookies);
                        unset($plugin_cookies->user_name);
                        unset($plugin_cookies->user_password);

                    return ActionFactory::show_error(true,
                        'Внимание!',
                        array('Учетная запись отвязана!'));

                }

            }
            else if ($control_id === 'reg_show_agreement') {

                $res = $this->session->show_user_agreement($plugin_cookies, $user_input, $this);
                return $res['action'];

            }
            else if ($control_id === 'pin_apply_subscription') {
                if ($user_input->pin == $this->session->get_parental_code()){

                }else{
                    return ActionFactory::show_error(false,
                        'Ошибка!',
                        array('Введен неверный код от родительского контроля!'));
                }
            }
            else if ($control_id === 'go_to_get_registration_form')
            {
                return $this->session->show_registration_form(
                    $plugin_cookies, $this);
            }
//            else if ($control_id === 'edit_subscription')
//            {
//                return $this->session->do_get_edit_subscription_action(
//                    $plugin_cookies, $this);
//            }
            else if ($control_id == 'show_agreement') {
                $doc = HD::http_get_document($this->session->get_agreement());
                ControlFactory::add_multiline_label($defs, '', 'Управление: "P+" - пролистать вверх, "P-" - пролистать вниз.'."\n\n".$doc, 17);
                ControlFactory::add_close_dialog_button($defs, 'ОК', 300);
                return ActionFactory::show_dialog('Пользовательское соглашение.', $defs, true, 1800);

            }
            else if ($control_id == 'show_terms') {
                $doc = HD::http_get_document($this->session->get_terms());
                ControlFactory::add_multiline_label($defs, '', 'Управление: "P+" - пролистать вверх, "P-" - пролистать вниз.'."\n\n".$doc, 17);
                ControlFactory::add_close_dialog_button($defs, 'ОК', 300);
                return ActionFactory::show_dialog('Правила пользования сервисом.', $defs, true, 1800);

            }
            else if ($control_id == 'edit_tariff'){
                $ch_tar = !empty($plugin_cookies->need_password_tariff)?$plugin_cookies->need_password_tariff:'no';
                if (($ch_tar == 'yes') && ($this->session->get_parental_code() != '0000') ) {
                    $defs = array();
                    $this->add_text_field($defs,
                        'pin', 'Код:',
                        '', 1, 1, 0, 1, 500, 0, false);
                    $this->add_close_dialog_and_apply_button($defs, 'apply_change_tariff', 'Применить', 250);
                    return ActionFactory::show_dialog("Родительский контроль", $defs, true);
                }else{
                    return ActionFactory::open_folder(I24hPrivateScreen::get_media_url_str(''),'Управление тарифами');
                }

            }
            else if ($control_id == 'apply_change_tariff'){
                if (!empty($user_input->pin) && ($user_input->pin === $this->session->get_parental_code())){
                    return ActionFactory::open_folder(I24hPrivateScreen::get_media_url_str(''),'Управление тарифами');
                }else{
                    return ActionFactory::show_error(false,
                        'Ошибка!',
                        array('Введен неверный код от родительского контроля!'));
                }
            }

            else if ($control_id === 'apply_subscription')
            {

                if ($user_input->user_name === '')
                {
                    return ActionFactory::show_error(false,
                        'Error',
                        array('Subscription should be non-empty.'));
                }

                $plugin_cookies->user_name = $user_input->user_name;
                $plugin_cookies->password = $user_input->password;

                $res = $this->session->apply_subscription($plugin_cookies, $user_input,$this);
                $need_close_dialog = true;
                $need_reset_controls = true;
                $post_action = $res['action'];
                return ActionFactory::show_main_screen($post_action);
            }
            else if ($control_id === 'password_for_sextv') {return null;}
            else if ($control_id === 'password_for_tariff'){return null;}
            else if ($control_id === 'get_password')
            {
                $defs =  $this->do_get_pin_control_defs($plugin_cookies);
                return ActionFactory::show_dialog("Родительский контроль", $defs, true);
            }
            else if ($control_id === 'get_sms')
            {
                try
                {
            	    $res = $this->session->get_password($plugin_cookies, $user_input, $this);
                }
                catch (DuneException $e)
                {
                    return $e->get_error_action();
                }
                $need_close_dialog = $res['need_close_dialog'];
                $need_reset_controls = $res['need_close_dialog'];
                return $res['action'];
            }
        } else if ($user_input->action_type === 'confirm')
        {
            $control_id = $user_input->control_id;

            if ($control_id === 'password_for_sextv'){
                return null;
            }
            else if ($control_id === 'password_for_tariff'){
                return null;
            }
            else if ($control_id === 'get_password'){return null;}else {

                $control_id = $user_input->control_id;
                $new_value = $user_input->{$control_id};

                if ($control_id === 'show_tv')
                    $plugin_cookies->show_tv = $new_value;
                else if ($control_id === 'stream_type') {
                    $plugin_cookies->stream_type = $new_value;
                    $this->plugin->get_tv()->unload_channels();
                } else if ($control_id === 'show_vod')
                    $plugin_cookies->show_vod = $new_value;
                $need_reset_controls = true;
            }

        } else if ($user_input->action_type === 'close_window'){

            if (($this->session->get_parental_code() === $user_input->pin1) or ($this->session->get_parental_code() === '0000')){
                if (!empty($user_input->pin2)){
                    if (strlen($user_input->pin2)!=4){
                        return ActionFactory::show_error(false, 'Ошибка!', array('Код родительсткого контроля должен быть из 4 цифр!'));
//                        $defs =  $this->do_get_pin_error_defs($plugin_cookies);
//                        return ActionFactory::show_dialog('Ошибка',  $defs,true,800);
                    }else {

                        if ($this->session->set_parental_code($user_input->pin2)) {

                            $this->plugin->get_tv()->unload_channels();

                            $plugin_cookies->need_password_sextv = $user_input->password_for_sextv;
                            $plugin_cookies->need_password_tariff = $user_input->password_for_tariff;
                            return ActionFactory::show_error(false, 'Результат:', array('Данные сохранены успешно!'));
                        } else {
                            return ActionFactory::show_error(false, 'Ошибка!', array('Данные не сохранены!'));
                        }
                    }



                }else{

                    $this->plugin->get_tv()->unload_channels();

                    $plugin_cookies->need_password_sextv = $user_input->password_for_sextv;
                    $plugin_cookies->need_password_tariff = $user_input->password_for_tariff;
                    return ActionFactory::show_error(false,'Результат:',array('Данные сохранены успешно!'));
                }
            }else{
                return ActionFactory::show_error(false,'Ошибка!',array('Указан неверный "Текущий код"!'));
            }
        }
        if ($need_reset_controls)
        {
            $defs = $this->do_get_control_defs($plugin_cookies);
            $reset_controls_action = ActionFactory::reset_controls(
                $defs, $post_action);

            if ($need_close_dialog)
            {
                return ActionFactory::close_dialog_and_run(
                    $reset_controls_action);
            }
            return $reset_controls_action;
        }
    }
}

?>
