<?php

declare(strict_types=1);

namespace app\models;

class ProductEdgeProduct extends Edge
{
    public static function collectionName(): string
    {
        return 'product_edge_product';
    }

    /**
     * Найти все соединения
     *
     * @param string $_key Ключ товара
     * @param int $limit Ограничение по количеству
     *
     * @return array|null Найденные соединения (массив с ключами - "_key")
     */
    public static function searchConnections(string $_key, int $limit = 30): ?array
    {
        // Инициализация буфера возврата
        $return = [];

        // Поиск аналогов
        $edges = self::find()->where(['_from' => Product::collectionName() . "/$_key"])->limit($limit)->all();

        foreach ($edges as $edge) {
            // Перебор найденных рёбер

            // Извлечение ключа
            preg_match_all('/\w+\/([0-9]+)/', $edge->_to, $matches);

            // Запись артикула в буфер вывода
            $return[] = $matches[1][0];
        }

        // Перерасчет ограничения по количеству
        $limit -= count($edges);

        // Поиск аналогов (с обратной привязкой)
        $edges = self::find()->where(['_to' => Product::collectionName() . "/$_key"])->limit($limit)->all();

        foreach ($edges as $edge) {
            // Перебор найденных рёбер

            // Извлечение ключа
            preg_match_all('/\w+\/([0-9]+)/', $edge->_from, $matches);

            // Запись артикула в буфер вывода
            $return[] = $matches[1][0];
        }

        return $return;
    }
}
