<?php
declare(strict_types=1);

/**
 * 号码厂商模型，对应 attr_factory 表
 */
class NumberVendor extends Model
{
    protected string $table = 'attr_factory';
    protected string $key   = 'factory_id';

    /**
     * 供其他模块下拉选择用
     */
    public function listAll(): array
    {
        return $this->db->select($this->table, ['factory_id', 'factory_name'], [
            'ORDER' => ['factory_name' => 'ASC'],
        ]);
    }

    /**
     * 厂商名称 → ID 映射，key 统一转小写，供按名称批量匹配（如粘贴导入）使用
     * @return array<string,int>
     */
    public function idsByName(): array
    {
        $map = [];
        foreach ($this->listAll() as $row) {
            $map[mb_strtolower($row['factory_name'])] = (int) $row['factory_id'];
        }

        return $map;
    }

    /**
     * 按 ID 取厂商名称，查不到返回空串（清洗时要把厂商名传给 ypAPI）
     */
    public function nameById(int $factoryId): string
    {
        if ($factoryId <= 0) {
            return '';
        }

        return (string) $this->db->get($this->table, 'factory_name', [$this->key => $factoryId]);
    }

    /**
     * 按名称取厂商 ID，不存在就建一条
     * 只给系统内置的默认厂商（如 OE）用，用户粘贴进来的厂商名不走这里，避免把错别字写进主数据
     */
    public function ensureByName(string $name): int
    {
        $id = (int) $this->db->get($this->table, $this->key, ['factory_name' => $name]);
        if ($id > 0) {
            return $id;
        }

        $this->db->insert($this->table, ['factory_name' => $name]);

        return (int) $this->db->id();
    }
}
