<?php

declare(strict_types=1);

namespace app\models;

use yii;

use app\models\traits\SearchByEdge;
use app\models\Account;

/**
 * Импорт поставок
 *
 * Хранит себе связи с поставками которые были загружены вместе
 */
class Import extends Document
{
    use SearchByEdge;

    /**
     * Имя коллекции
     */
    public static function collectionName(): string
    {
        return 'import';
    }

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

    /**
     * Метки свойств
     */
    public function attributeLabels(): array
    {
        return array_merge(
            parent::attributeLabels(),
            [
                'pstn' => 'Позиция',
                'name' => 'Название',
                'file' => 'Файл'
            ]
        );
    }

    /**
     * Правила
     */
    public function rules(): array
    {
        return array_merge(
            parent::rules(),
            [
                [
                    'pstn',
                    'required'
                ],
                [
                    'pstn',
                    'integer'
                ],
                [
                    [
                        'file',
                        'name'
                    ],
                    'string'
                ]
            ]
        );
    }

    public static function searchByPosition(int $position = 1, Account $account = null, int $limit = 1): array
    {
        return self::searchByEdge(
            from: 'account',
            to: 'import',
            edge: 'import_edge_account',
            direction: 'INBOUND',
            subquery_where: 'account._key == "' . Account::initAccount($account)->_key . '" && import_edge_account.type == "loaded"',
            where: ['import.pstn' => $position],
            limit: $limit
        );
    }
}
