<?php
    
    namespace common\models;
    
    use common\behaviors\MultipleImgBehavior;
    use common\behaviors\SaveMultipleFileBehavior;
    use common\modules\language\behaviors\LanguageBehavior;
    use common\modules\product\models\ProductVariant;
    use Yii;
    use yii\db\ActiveQuery;
    use yii\db\ActiveRecord;
    use yii\web\Request;
    
    /**
     * This is the model class for table "project".
     * @todo Refactor
     * @property integer            $project_id
     * @property integer            $date_add
     * @property array              $imagesConfig
     * @property ProductVariant[]   $variants
     * @property ProductToProject[] $productToProject
     * * From language behavior *
     * @property ProjectLang        $lang
     * @property ProjectLang[]      $langs
     * @property ProjectLang        $object_lang
     * @property string             $ownerKey
     * @property string             $langKey
     * @property ProjectLang[]      $model_langs
     * @property bool               $transactionStatus
     * @method string           getOwnerKey()
     * @method void             setOwnerKey( string $value )
     * @method string           getLangKey()
     * @method void             setLangKey( string $value )
     * @method ActiveQuery      getLangs()
     * @method ActiveQuery      getLang( integer $language_id )
     * @method ProjectLang[]    generateLangs()
     * @method void             loadLangs( Request $request )
     * @method bool             linkLangs()
     * @method bool             saveLangs()
     * @method bool             getTransactionStatus()
     * * End language behavior *
     * * From multipleImage behavior
     * @property ProjectImage       $image
     * @property ProjectImage[]     $images
     * @method ActiveQuery getImage()
     * @method ActiveQuery getImages()
     * @method array getImagesConfig()
     * @method array getImagesHTML( string $preset )
     * * End multipleImage behavior
     */
    class Project extends ActiveRecord
    {
        
        public $imagesUpload = [];
        
        /**
         * @inheritdoc
         */
        public static function tableName()
        {
            return 'project';
        }
        
        /**
         * @inheritdoc
         */
        public function behaviors()
        {
            return [
                'language'      => [
                    'class' => LanguageBehavior::className(),
                ],
                'images'        => [
                    'class'     => SaveMultipleFileBehavior::className(),
                    'name'      => 'imagesUpload',
                    'directory' => 'projects',
                    'column'    => 'image',
                    'links'     => [
                        'project_id' => 'project_id',
                    ],
                    'model'     => ProjectImage::className(),
                ],
                'multipleImage' => [
                    'class'  => MultipleImgBehavior::className(),
                    'links'  => [
                        'project_id' => 'project_id',
                    ],
                    'model'  => ProjectImage::className(),
                    'config' => [
                        'caption'       => 'image',
                        'delete_action' => '/project/delimg',
                        'id'            => 'project_image_id',
                    ],
                ],
            ];
        }
        
        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                [
                    [ 'date_add' ],
                    'default',
                    'value' => function() {
                        return time();
                    },
                ],
                [
                    [
                        'date_add',
                        'imagesUpload',
                    ],
                    'safe',
                ],
                [
                    [ 'date_add' ],
                    'filter',
                    'filter' => function($value) {
                        return strtotime($value) ? : time();
                    },
                ],
            ];
        }
        
        /**
         * @inheritdoc
         */
        public function attributeLabels()
        {
            return [
                'project_id'  => Yii::t('app', 'project_id'),
                'title'       => Yii::t('app', 'title'),
                'link'        => Yii::t('app', 'link'),
                'description' => Yii::t('app', 'description'),
                'date_add'    => Yii::t('app', 'date_add'),
                'images'      => Yii::t('app', 'images'),
            ];
        }
        
        public function getProductToProject()
        {
            return $this->hasMany(ProductToProject::className(), [
                'project_id' => 'project_id',
            ]);
        }
        
        public function getVariants()
        {
            return $this->hasMany(ProductVariant::className(), [ 'product_variant_id' => 'product_variant_id' ])
                        ->viaTable('product_to_project', [ 'project_id' => 'project_id' ]);
        }
    }
