<?php

declare(strict_types=1);

namespace app\models;

use app\models\traits\Xml2Array;

use carono\exchange1c\interfaces\OfferInterface;

class SupplyEdgeProduct extends Edge implements OfferInterface
{
    use Xml2Array;

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

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

    public function attributeLabels(): array
    {
        return array_merge(
            parent::attributeLabels(),
            [
                'ocid' => 'Идентификатор 1C (ocid)',
                'onec' => 'Данные 1C'
            ]
        );
    }

    public static function createPriceTypes1c($types): mixed
    {
        return true;
    }

    public function setPrice1c($price): mixed
    {
        return true;
    }

    public function setSpecification1c($specification): mixed
    {
        return true;
    }

    public function getExportFields1c($context = null): array
    {
        return [];
    }

    public function getGroup1c(): ProductGroup
    {
        return $this->group ?? new ProductGroup;
    }

    public static function readByOnecId(string $ocid): ?Supply
    {
        return self::findOne([self::getIdFieldName1c() => $ocid]);
    }

    /**
     * Поиск по идентификатору поставки
     *
     * @param string $_id Идентификатор поставки
     * @param int $limit Ограничение по максимальному количеству
     */
    public static function searchBySupplyId(string $_id, int $limit = 1): array
    {
        return self::find()->where(['_from' => $_id])->limit($limit)->all();
    }

    /**
     * Название поля в котором хранится ID из 1C
     */
    public static function getIdFieldName1c(): string
    {
        return 'ocid';
    }
}
