<?php

namespace common\modules\blog\models;

use common\components\ActiveRecordModel;
use common\modules\triggers\models\TriggerLogs;
use Yii;
use common\modules\blog\models\Post;
use common\modules\users\models\User;

/**
 * This is the model class for table "blog_schedule".
 *
 * @property integer $id
 * @property string $email
 * @property integer $post_id
 * @property integer $sent
 * @property string $date
 *
 * @property Post $post
 */
class BlogSchedule extends ActiveRecordModel
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'blog_schedule';
    }

    public function name(){
        return 'Расписание рассылок';
    }

    public function behaviors(){
        return [];
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['email', 'post_id', 'date'], 'required'],
            [['post_id', 'sent'], 'integer'],
            [['date'], 'safe'],
            [['email'], 'string', 'max' => 255],
            [['post_id'], 'exist', 'skipOnError' => true, 'targetClass' => Post::className(), 'targetAttribute' => ['post_id' => 'id']],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'email' => 'Email',
            'post_id' => 'Пост',
            'sent' => 'Отправлено',
            'date' => 'Дата отправки',
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getPost()
    {
        return $this->hasOne(Post::className(), ['id' => 'post_id']);
    }

    /**
     * @param $email
     * @param User|null $user
     */
    public static function generate($email, $user=null){
        $date = new \DateTime();
        // Получили все посты
        $all_posts = Post::find()->where(['active' => 1])->orderBy('created_at DESC')->all();
        // Создали результирующий массив
        $result_posts = [];
        // В цикле перебираем все посты в базе
        foreach($all_posts as $post) {
            // Сформировали ссылку на пост
            $post_link = '/blog/'.$post->url;
            // Если этот пользователь есть в базе, то производим сверку по времени просмотров
            if ($user!==null) {
                // Получили время просмотра текущего (на итерации) поста
                $watch_time = TriggerLogs::getSummaryTimeByUrl($post_link, $user->id);
                // Если время просмотра меньше 30 секунд
                if ($watch_time<30)
                    // Заносим в результирующий массив
                    $result_posts[] = $post->id;
            } else {
                // В случае если это пользователь без аккаунта, заносим в результирующий массив без сверки
                $result_posts[] = $post->id;
            }
        }
        // Далее мы уже имеем в распоряжении сформированный массив
        foreach($result_posts as $post_id) {
            // Сдвигаем дату на 7 дней вперед
            $date->modify('+7 days');
            // Создали новый экземпляр модели
            $model = new BlogSchedule();
            // Переопределили свойства
            $model->email = $email;
            $model->post_id = $post_id;
            $model->date = $date->format('Y-m-d');
            // Сохраняем запись в расписании
            if (!$model->save())
                echo current(current($model->getErrors())).'<br>';
        }
    }
}
