<?php

declare(strict_types=1);

namespace app\models;

use mirzaev\yii2\arangodb\Query;

/**
 * Связь инстанций импорта с поставками
 */
class ImportEdgeSupply extends Edge
{
    /**
     * Имя коллекции
     */
    public static function collectionName(): string
    {
        return 'import_edge_supply';
    }

    /**
     * Свойства
     */
    public function attributes(): array
    {
        return array_merge(
            parent::attributes(),
            [
                'vrsn'
            ]
        );
    }

    /**
     * Метки свойств
     */
    public function attributeLabels(): array
    {
        return array_merge(
            parent::attributeLabels(),
            [
                'vrsn' => 'Версия'
            ]
        );
    }

    /**
     * Правила
     */
    public function rules(): array
    {
        return array_merge(
            parent::rules(),
            [
                [
                    [
                        'vrsn'
                    ],
                    'integer',
                    'message' => '{attribute} должен быть числом.'
                ]
            ]
        );
    }

    /**
     * Перед сохранением
     *
     * @todo Подождать обновление от ебаного Yii2 и добавить
     * проверку типов передаваемых параметров
     */
    public function beforeSave($data): bool
    {
        if (parent::beforeSave($data)) {
            if ($this->isNewRecord) {
            }

            return true;
        }

        return false;
    }

    /**
     * Поиск максимальной версии
     *
     * Ищет максимальную версию у поставок
     *
     * @param Supply $supply Поставка
     *
     * @return int Версия, если найдена
     */
    public static function searchMaxVersion(Supply $supply): ?int
    {
        return static::find()->execute("RETURN MAX(
            FOR import_edge_supply IN import_edge_supply
            FILTER (import_edge_supply._to == 'supply/$supply->_key')
            LIMIT 0,999
            RETURN import_edge_supply.vrsn
        )")[0] ?? null;
    }

    /**
     * Поиск по поставке
     *
     * @param Supply $supply
     *
     * @return static|null
     */
    public static function searchBySupply(Supply $supply): ?static
    {
        return static::find()->where(['_to' => $supply->readId()])->one() ?? null;
    }
}
