<?php

namespace common\models;

use common\classes\Debug;
use Yii;

/**
 * This is the model class for table "reports".
 *
 * @property int $id
 * @property string $created_at
 * @property string $today
 * @property string $difficulties
 * @property string $tomorrow
 * @property int $user_card_id
 * @property int $status
 *
 * @property UserCard $userCard
 */
class Reports extends \yii\db\ActiveRecord
{
    public $_task;

    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'reports';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['user_card_id', 'status'], 'integer'],
            [['_task'], 'checkIsArray'],
            [['user_card_id', 'created_at'], 'required'],
            [['today', 'difficulties', 'tomorrow', 'created_at'], 'string', 'max' => 255],
            [['user_card_id'], 'exist', 'skipOnError' => true, 'targetClass' => UserCard::className(), 'targetAttribute' => ['user_card_id' => 'id']],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'created_at' => 'Дата заполнения отчета',
            'today' => 'Что было сделано сегодня?',
            'difficulties' => 'Какие сложности возникли?',
            'tomorrow' => 'Что планируется сделать завтра?',
            'user_card_id' => 'Пользователь',
            'status' => 'Статус'
        ];
    }

    public function afterSave($insert, $changedAttributes)
    {
        parent::afterSave($insert, $changedAttributes);
        $this->saveTask();
    }

    public function afterFind()
    {
        parent::afterFind();
        $this->_task = [];
        if ($this->task) {
            $i = 0;
            foreach ($this->task as $task) {
                $this->_task[$i]['task'] = $task->task;
                $this->_task[$i]['hours_spent'] = $task->hours_spent;
                $this->_task[$i]['minutes_spent'] = $task->minutes_spent;
                $i++;
            }
        }
    }

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

    public function getTask()
    {
        return $this->hasMany(ReportsTask::class, ['report_id' => 'id']);
    }

    public function saveTask()
    {
        ReportsTask::deleteAll(['report_id' => $this->id]);
        if ($this->_task) {
            foreach ($this->_task as $task) {
                $taskModel = new ReportsTask();
                $taskModel->report_id = $this->id;
                $taskModel->task = $task['task'];
                $taskModel->hours_spent = (float)$task['hours_spent'];
                $taskModel->minutes_spent = (int) $task['minutes_spent'];
                $taskModel->status = 1;
                $taskModel->created_at = time();
                $taskModel->save();
            }
        }
    }

    public function checkIsArray()
    {
        if (!is_array($this->_task)) {
            $this->addError('_task', 'X is not array!');
        }
    }

    public static function getFio($data)
    {
        $user_card = UserCard::findOne(['id' => $data->user_card_id]);
        return $user_card->fio;
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getReportsTask()
    {
        return $this->hasMany(ReportsTask::className(), ['report_id' => 'id']);
    }

    public function calculateOrderTime()
    {
        return ReportsTask::find()->where(['report_id' => $this->id])->sum('hours_spent');
    }
}