<?php

namespace common\modules\analyticsSchool\models;

use Yii;
use yii\web\UploadedFile;

/**
 * This is the model class for table "analytics_school_lesson_file".
 *
 * @property integer $id
 * @property integer $lesson_id
 * @property string $title
 * @property string $file
 * @property UploadedFile $document
 *
 * @property AnalyticsSchoolLesson $lesson
 */
class AnalyticsSchoolLessonFile extends \yii\db\ActiveRecord
{
    public $document;
    protected $save_folder = ['uploads', 'lessons'];

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

    /**
     * @param bool $insert
     * @return bool
     */
    public function beforeSave($insert){
        if (!parent::beforeSave($insert))
            return false;

        // Сгенерировали имя папки
        $dirname = Yii::$app->security->generateRandomString(5);
        // Определили mime тип файла и занесли его в массив
        $fileFormat = explode('/', $this->document->type);
        // Сгенерировали новое имя для файла
        $fileName = Yii::$app->security->generateRandomString(5).'.'.$fileFormat[1];
        // Определили папку в которую будет загружен файл
        $saveDir = $this->getPath().DIRECTORY_SEPARATOR.$dirname;
        // Если папка не найдена
        if (!is_dir($saveDir))
            // Создаем ее (рекурсивно)
            mkdir($saveDir, 0777, true);

        // Если до этого момента действие не было остановлено - сохраняем файл в файловой системе
        if ($this->document->saveAs($saveDir.DIRECTORY_SEPARATOR.$fileName)) {
            // Переопределяем значение в поле
            $this->file = $this->getPath(false, '/').'/'.$dirname.'/'.$fileName;
        }

        return true;
    }

    /**
     * @param bool $absolute
     * @param string $delimiter
     * @return string
     */
    public function getPath($absolute=true, $delimiter=DIRECTORY_SEPARATOR) {
        $path = $delimiter.(implode($delimiter, $this->save_folder));
        return ($absolute===true) ? Yii::getAlias('@frontend').$delimiter.'web'.$path : $path;
    }

    public function beforeDelete(){
        if (!parent::beforeDelete())
            return false;

        $this->deleteFile();
        return true;
    }

    /**
     * @return bool
     */
    public function deleteFile(){
        $filepath = Yii::getAlias('@frontend').'/'.'web'.$this->file;
        if (file_exists($filepath)) {
            return unlink($filepath);
        }
        return true;
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['lesson_id', 'title'], 'required'],
            [['lesson_id'], 'integer'],
            [['file'], 'string'],
            [['title'], 'string', 'max' => 255],
            [['document'], 'file', 'extensions' => 'PDF, RAR, ZIP, DOC, XLS, PPT'],
            [['lesson_id'], 'exist', 'skipOnError' => true, 'targetClass' => AnalyticsSchoolLesson::className(), 'targetAttribute' => ['lesson_id' => 'id']],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'lesson_id' => 'Lesson ID',
            'title' => 'Title',
            'file' => 'File',
        ];
    }

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