<?php

declare(strict_types=1);

namespace app\controllers;

use app\models\AccountEdgeNotification;
use yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\web\Response;

use app\models\Order;
use app\models\AccountEdgeOrder;

use Exception;

class CartController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::class,
                'only' => ['index'],
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['@']
                    ]
                ]
            ]
        ];
    }

    /**
     * Страница: "Корзина"
     *
     * @see $this->behaviors Доступ только аутентифицированным
     */
    public function actionIndex(): string|array|null
    {
        // Инициализация настроек страницы
        $page = yii::$app->request->get('page') ?? 1;

        // Инициализация корзина
        $model = Order::search();

        // Инициализация содержимого корзины
        $supplies = $model->content(10, $page);

        // Инициализация реестра дубликатов
        $registry = [];

        // Подсчёт и перестройка массива
        foreach ($supplies as $key => &$supply) {
            // Перебор поставок

            if (in_array($supply->catn, $registry)) {
                // Если данная поставка найдена в реестре

                // Удаление
                unset($supplies[$key]);

                // Пропуск итерации
                continue;
            }

            $amount = 0;

            // Повторный перебор для поиска дубликатов
            foreach ($supplies as &$supply4check) {
                if ($supply == $supply4check) {
                    // Найден дубликат

                    // Постинкрементация счётчика
                    $amount++;

                    // Запись в реестр
                    $registry []= $supply4check->catn;
                }
            }

            // Запись количества
            $supply->amnt = $amount;
        }

        // Инициализация возврата по умолчанию
        $return = [
            '_csrf' => yii::$app->request->getCsrfToken()
        ];

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

            yii::$app->response->format = Response::FORMAT_JSON;

            $return = array_merge($return, [
                'main' => $this->renderPartial('index', compact('model', 'supplies')),
                'title' => 'Корзина',
                'redirect' => '/cart'
            ]);
        } else {
            // GET-запрос (подразумевается)

            return $this->render('index', compact('model', 'supplies'));
        }

        return $return;
    }
}
