<?php

declare(strict_types=1);

namespace mirzaev\ebala\models\traits;

// Library of ArangoDB
use ArangoDBClient\Document as _document;

/**
 * Trait with instance of document in database handler
 *
 * @package mirzaev\ebala\models\treits
 * @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
 */
trait instance
{
  /**
   * Инициализация инстанции документа в базе данных
   *
   * @param ?_document $document Инстанция документа в базе данных для записи
   *
   * @return ?_document Инстанция документа в базе данных, если инициализирована
   */
  public function instance(?_document $document = null): ?_document
  {
    // Проверка инициализированности и возврат (успех)
    if (isset($this->document)) return $this->document;

    // Проверка инстанции документа в базе данных для записи и возврат (провал)
    if ($document === null) return null;

    // Запись в свойство и возврат (успех)
    return $this->document = $document;
  }
}
