<?php

declare(strict_types=1);

namespace app\models;

use ArangoDBClient\Document as ArangoDBDocument;

class Dellin extends Document
{
    public static function collectionName(): string
    {
        return 'dellin';
    }

    public function attributes(): array
    {
        return array_merge(
            parent::attributes(),
            [
                'data'
            ]
        );
    }

    public function attributeLabels(): array
    {
        return array_merge(
            parent::attributeLabels(),
            [
                'data' => 'Данные ДеловыеЛинии',
            ]
        );
    }

    /**
     * Поиск по идентификатору города
     *
     * @param string $id Идентификатор города
     */
    public static function searchByCityId(string $id): ?static
    {
        return static::findOne(['data["id"]' => $id]);
    }

    /**
     * Поиск по КЛАДР-коду города
     *
     * @param string $id Код КЛАДР города
     */
    public static function searchByCityKladr(string $code): ?static
    {
        return static::findOne(['data["code"]' => $code]);
    }

    /**
     * Поиск по идентификатору терминала
     *
     * @param int $id Идентификатор терминала
     * @param bool $terminal_data_only Запрос только данных терминала
     */
    public static function searchByTerminalId(int $id, bool $terminal_data_only = false): bool|static|array|null|ArangoDBDocument
    {
        if ($terminal_data_only) {
            return static::find()->foreach(['terminal' => self::collectionName() . '.data["terminals"]["terminal"]'])->where(['terminal["id"] == "' . $id . '"'])->select('terminal')->createCommand()->execute()->getAll()[0];
        }

        return static::find()->foreach(['terminal' => self::collectionName() . '.data["terminals"]["terminal"]'])->where(['terminal["id"] == "' . $id . '"'])->one();
    }
}
