<?php
/**
 * Created by PhpStorm.
 * User: PHOENIX
 * Date: 18.02.16
 * Time: 17:07
 */

namespace common\modules\triggers\components\conditions\conditions;


use common\modules\messageTemplate\components\Templates;
use common\modules\messageTemplate\models\MessageTemplate;
use common\modules\triggers\components\conditions\vendor\ConditionBase;
use common\modules\triggers\components\conditions\vendor\ConditionInterface;
use common\modules\triggers\models\TriggerCondition;
use common\modules\triggers\models\TriggerLogs;
use common\modules\triggers\models\TriggerParam;
use common\modules\triggers\models\TriggerSchedule;
use common\modules\triggers\models\TriggerTrigger;
use common\modules\users\models\User;
use yii\web\BadRequestHttpException;

class CheckPresenceTime extends ConditionBase implements ConditionInterface {
    const CONDITION_ID=5;

    public $name = 'Время присутствия на странице (Игнорируется оператором "И")';

    public $params=[];

    /**
     * @param null|string $conditionName
     * @return $this mixed
     */
    public static function init($conditionName=__CLASS__){
        return parent::init($conditionName);
    }

    public function initScript($cron_time=180){
        // Получили список всех активных (актуальных) триггеров
        /** @var TriggerTrigger[] $actualTriggers */
        $actualTriggers = TriggerTrigger::getActualTriggers(self::CONDITION_ID);
        // Перебираем их в цикле
        foreach($actualTriggers as $trigger) {
            // Получили условия триггера на итерации
            $conditions = TriggerCondition::find()->where(['trigger_id' => $trigger->getPrimaryKey()])->all();
            // Перебираем все условия триггера на итерации
            foreach($conditions as $condition) {
                // Пытаемся получить параметр URL в условии
                /** @var TriggerParam $paramUrl */
                $paramUrl = TriggerParam::find()->where(['condition_id'=>$condition->getPrimaryKey(), 'key'=>'url'])->one();
                // Пытаемся получить параметр времени на условии
                /** @var TriggerParam $paramTime */
                $paramTime = TriggerParam::find()->where(['condition_id'=>$condition->getPrimaryKey(), 'key'=>'time'])->one();
                // Если сработали условия что триггер есть, у него указаны время и URL и при этом он является триггером ДАННОГО типа
                if ($condition->condition_id==self::CONDITION_ID && $paramUrl!==null && $paramUrl->value==\Yii::$app->request->getUrl() && $paramTime!==null && !\Yii::$app->user->isGuest) {
                    $view = \Yii::$app->controller->view;
                    // Создаем скрипт
                    $script ='$(document).ready(function() {
                                    var timer='.((int)$paramTime->value*1000).';
                                    setTimeout(function() {
                                        $.ajax({
                                            url: "/triggers/default/inittrigger",
                                            method: "GET",
                                            async: false,
                                            data: {
                                                id: '.$trigger->getPrimaryKey().'
                                            },
                                        });
                                    }, timer);
                                  });';
                    // Регистрируем его
                    $view->registerJs($script, $view::POS_READY);
                }
            }
        }
    }

    /**
     * @param TriggerSchedule $message
     * @return bool
     */
    public function check($message=null, $params = array()){
        $email = null;
        if (!is_null($message))
            $email = $message->email;
        elseif(array_key_exists('email', $params)) {
            $email = $params['email'];
        }
        if (!is_null($email)) {
            $user = User::find()->where(['email' => $email])->one();
            if (!is_null($message->trigger_id) && !is_null($user)) {
                /** @var TriggerCondition[] $conditions */
                $conditions = TriggerCondition::find()->where(['trigger_id'=>$message->trigger_id, 'condition_id' => self::CONDITION_ID])->all();
                foreach($conditions as $condition) {
                    $urlParam = TriggerParam::find()->where(['condition_id' => $condition->getPrimaryKey(), 'key' => 'url', 'value' => \Yii::$app->request->getUrl()])->one();
                    $timeParam = TriggerParam::find()->where(['condition_id' => $condition->getPrimaryKey(), 'key' => 'time'])->one();
                    if (!is_null($urlParam) && !is_null($timeParam)) {
                        $sumTime = TriggerLogs::getSummaryTimeByUrl($urlParam, $user->getPrimaryKey());
                        if ($sumTime >= $timeParam) {
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }
} 