<?php
    namespace frontend\controllers;
    
    use common\models\Banner;
    use common\models\Certificate;
    use common\models\Page;
    use common\models\Slider;
    use common\modules\product\models\Category;
    use common\modules\rubrication\models\TaxGroup;
    use yii\data\ActiveDataProvider;
    use yii\web\BadRequestHttpException;
    use yii\web\Controller;
    use yii\filters\VerbFilter;
    use yii\filters\AccessControl;
    use yii\web\NotFoundHttpException;
    
    /**
     * Site controller
     */
    class SiteController extends Controller
    {
        
        /**
         * @inheritdoc
         */
        public function behaviors()
        {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'only'  => [
                        'logout',
                        'signup',
                    ],
                    'rules' => [
                        [
                            'actions' => [ 'signup' ],
                            'allow'   => true,
                            'roles'   => [ '?' ],
                        ],
                        [
                            'actions' => [ 'logout' ],
                            'allow'   => true,
                            'roles'   => [ '@' ],
                        ],
                    ],
                ],
                'verbs'  => [
                    'class'   => VerbFilter::className(),
                    'actions' => [
                        'logout' => [ 'post' ],
                    ],
                ],
            ];
        }
        
        /**
         * @inheritdoc
         */
        public function actions()
        {
            return [
                'error'   => [
                    'class' => 'yii\web\ErrorAction',
                ],
                'captcha' => [
                    'class'           => 'yii\captcha\CaptchaAction',
                    'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : NULL,
                ],
            ];
        }
        
        /**
         * Displays homepage.
         * @return mixed
         */
        public function actionIndex()
        {
            $categories = Category::find()
                                  ->where([ 'depth' => 0 ])
                                  ->orderBy('category_id')
                                  ->joinWith('lang')
                                  ->all();
            $purposes = TaxGroup::find()
                                ->where([
                                    'tax_group.tax_group_id' => 5,
                                    'level'                  => 0,
                                ])
                                ->joinWith('options.lang')
                                ->one();
            $banners = Banner::find()
                             ->where([
                                 'banner.banner_id' => [
                                     3,
                                     4,
                                 ],
                                 'status'           => 1,
                             ])
                             ->joinWith('lang', true, 'INNER JOIN')
                             ->all();
            $slider = Slider::find()
                            ->where([
                                'slider.slider_id' => 2,
                                'slider.status'    => 1,
                            ])
                            ->joinWith('sliderImage.lang')
                            ->one();
            return $this->render('index', [
                'categories' => $categories,
                'purposes'   => $purposes,
                'banners'    => $banners,
                'slider'     => $slider,
            ]);
        }
        
        /**
         * Logs in a user.
         * @return mixed
         */
        //        public function actionLogin()
        //        {
        //            if(!Yii::$app->user->isGuest) {
        //                return $this->goHome();
        //            }
        //
        //            $model = new LoginForm();
        //            if($model->load(Yii::$app->request->post()) && $model->login()) {
        //                return $this->goBack();
        //            } else {
        //                return $this->render('login', [
        //                    'model' => $model,
        //                ]);
        //            }
        //        }
        
        /**
         * Logs out the current user.
         * @return mixed
         */
        //        public function actionLogout()
        //        {
        //            Yii::$app->user->logout();
        //
        //            return $this->goHome();
        //        }
        
        /**
         * Displays contact page.
         * @return string
         */
        public function actionContact()
        {
            $page = Page::find()->with('lang')->where(['id' => 6])->one();
            return $this->render('contact', [
                'page' => $page,
            ]);
        }
        
        /**
         * Signs user up.
         * @return mixed
         */
        //        public function actionSignup()
        //        {
        //            $model = new SignupForm();
        //            if($model->load(Yii::$app->request->post())) {
        //                if($user = $model->signup()) {
        //                    if(Yii::$app->getUser()
        //                                ->login($user)
        //                    ) {
        //                        return $this->goHome();
        //                    }
        //                }
        //            }
        //
        //            return $this->render('signup', [
        //                'model' => $model,
        //            ]);
        //        }
        
        /**
         * Requests password reset.
         * @return mixed
         */
        //        public function actionRequestPasswordReset()
        //        {
        //            $model = new PasswordResetRequestForm();
        //            if($model->load(Yii::$app->request->post()) && $model->validate()) {
        //                if($model->sendEmail()) {
        //                    Yii::$app->session->setFlash('success', 'Check your email for further instructions.');
        //
        //                    return $this->goHome();
        //                } else {
        //                    Yii::$app->session->setFlash('error', 'Sorry, we are unable to reset password for email provided.');
        //                }
        //            }
        //
        //            return $this->render('requestPasswordResetToken', [
        //                'model' => $model,
        //            ]);
        //        }
        
        /**
         * Resets password.
         *
         * @param string $token
         *
         * @return mixed
         * @throws BadRequestHttpException
         */
        //        public function actionResetPassword($token)
        //        {
        //            try {
        //                $model = new ResetPasswordForm($token);
        //            } catch(InvalidParamException $e) {
        //                throw new BadRequestHttpException($e->getMessage());
        //            }
        //
        //            if($model->load(Yii::$app->request->post()) && $model->validate() && $model->resetPassword()) {
        //                Yii::$app->session->setFlash('success', 'New password was saved.');
        //
        //                return $this->goHome();
        //            }
        //
        //            return $this->render('resetPassword', [
        //                'model' => $model,
        //            ]);
        //        }
        
        /**
         * Show certificates page.
         * @return string
         */
        public function actionCertificates()
        {
            $query = Certificate::find();
            $dataProvider = new ActiveDataProvider([
                'query'      => $query,
                'pagination' => false,
            ]);
            return $this->render('certificates', [
                'dataProvider' => $dataProvider,
            ]);
        }
        
        public function actionPage($id)
        {
            $model = Page::find()
                         ->where([ 'page.id' => $id ])
                         ->joinWith('lang', true, 'INNER JOIN')
                         ->one();
            if(empty( $model )) {
                throw new NotFoundHttpException();
            }
            return $this->render('page', [
                'model' => $model,
            ]);
        }
    }
