<?php

declare(strict_types=1);

namespace app\controllers;

use yii;
use yii\filters\AccessControl;
use yii\web\Cookie;
use yii\web\Response;
use yii\web\Controller;

class OfferController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::class,
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['index', 'suppliers'],
                    ],
                    [
                        'allow' => true,
                        'roles' => ['@'],
                        'actions' => ['accept', 'accept-suppliers']
                    ],
                    [
                        'allow' => false,
                        'roles' => ['?'],
                        'denyCallback' => [$this, 'accessDenied']
                    ]
                ]
            ]
        ];
    }

    public function accessDenied()
    {
        // Инициализация
        $cookies = yii::$app->response->cookies;

        // Запись cookie с редиректом, который выполнится после авторизации
        $cookies->add(new Cookie([
            'name' => 'offer',
            'value' => yii::$app->request->pathInfo
        ]));

        if (yii::$app->request->isPost) {
            // POST-запрос

            // Настройка
            yii::$app->response->format = Response::FORMAT_JSON;

            // Генерация ответа
            yii::$app->response->content = json_encode([
                'redirect' => '/authentication',
                '_csrf' => yii::$app->request->getCsrfToken()
            ]);
        } else if (Yii::$app->request->isGet) {
            // GET-запрос

            $this->redirect('/authentication');
        }
    }

    public function actionIndex()
    {
        return $this->render('/offer/index');
    }

    public function actionSuppliers()
    {
        return $this->render('/offer/supplier');
    }

    public function actionAccept()
    {
        // Инициализация
        yii::$app->user->identity->acpt ?? yii::$app->user->identity->acpt = [];

        // Запись
        yii::$app->user->identity->acpt += ['buyer' => true];

        if (yii::$app->user->identity->save()) {
            // Удалось записать данные

            // Запись в сессию
            yii::$app->session['offer_buyer_accepted'] = true;


            yii::$app->response->redirect('/');
        }
    }

    public function actionAcceptSuppliers()
    {
        // Инициализация
        yii::$app->user->identity->acpt ?? yii::$app->user->identity->acpt = [];

        yii::$app->user->identity->acpt += ['supplier' => true];

        if (yii::$app->user->identity->save()) {
            // Удалось записать данные

            // Запись в сессию
            yii::$app->session['offer_supplier_accepted'] = true;


            yii::$app->response->redirect('/');
        }
    }
}
