<?php

namespace common\modules\pages\controllers;

use common\modules\pages\repositories\read\PageReadRepository;
use frontend\components\FrontendController;
use yii\web\NotFoundHttpException;
use yii\filters\AccessControl;

class PageController extends FrontendController
{
    private $_pages;

    public $layout = 'page';

    public function __construct($id, $module, PageReadRepository $pages, $config = [])
    {
        parent::__construct($id, $module, $config);
        $this->_pages = $pages;
    }

    public function behaviors(): array
    {
        return [
            'access' => [
                'class' => AccessControl::class,
                'rules' => [
                    [
                        'actions' => ['view'],
                        'allow'   => true,
                        'roles'   => ['Pages'],
                    ],
                    [
                        'actions' => ['preview'],
                        'allow'   => true,
                        'roles'   => ['PagesManagement'],
                    ],
                    [    // all the action are accessible to admin
                        'allow' => true,
                        'roles' => ['admin'],
                    ],
                ],
            ],
        ];
    }

    /**
     * @param $id
     *
     * @return mixed
     * @throws NotFoundHttpException
     * @internal param string $slug
     */
    public function actionView($id)
    {
        if (!$page = $this->_pages->find($id)) {
            throw new NotFoundHttpException('The requested page does not exist.');
        }

        return $this->render('view', [
            'page' => $page,
        ]);
    }

    public function actionPreview($id, $language = '')
    {
        if (!$page = $this->_pages->findPreview($id, $language)) {
            throw new NotFoundHttpException('The requested page does not exist.');
        }

        return $this->render('view', [
            'page' => $page,
        ]);
    }
}