<?php

declare(strict_types=1);

namespace app\models;

use ArangoDBClient\Document as ArangoDBDocument;

use app\models\traits\SearchByEdge;
use app\models\ImportEdgeFile;

class File extends Document
{
    use SearchByEdge;

    public static function collectionName(): string
    {
        return 'file';
    }

    public function attributes(): array
    {
        return array_merge(
            parent::attributes(),
            [
                'type',
                'path',
                'name',
                'user',
                'stts',
                'meta'
            ]
        );
    }

    public function attributeLabels(): array
    {
        return array_merge(
            parent::attributeLabels(),
            [
                'type' => 'Тип файла',
                'path' => 'Относительный от хранилища путь до файла',
                'name' => 'Название файла',
                'user' => 'Пользователь управляющий файлом',
                'stts' => 'Статус',
                'meta' => 'Метаданные'
            ]
        );
    }

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

                    $this->stts = 'needed to load';
                }
            }

            return true;
        }

        return false;
    }

    public static function searchSuppliesNeededToLoad(int $amount = 3): array
    {
        return static::find()->where(['stts' => 'needed to load'])->limit($amount)->all();
    }


    /**
     * Поиск по инстанции импорта
     *
     * @param Import $import Инстанция импорта
     */
    public static function searchByImport(Import $import): ?File
    {
        return new File(self::searchByEdge(
            from: 'import',
            to: 'file',
            subquery_where: [
                [
                    'import._id' => $import->readId()
                ]
            ],
            where: 'import_edge_file[0]._id != null',
            select: 'file',
            limit: 1
        )[0]) ?? null;
    }
}
