<?php

declare(strict_types=1);

/**
 * 本文件属于 DBErp 进销存系统。
 *
 * 版权所有 © 2026 北京珑大钜商科技有限公司。保留所有权利。
 *
 * 未经官方授权，不得删除、篡改或隐藏本文件中的版权声明、产品标识与来源信息。
 * 商业授权、官方更新与技术支持服务，请以珑大官方支持中心记录为准。
 *
 * @link https://support.loongdom.cn
 * @see  https://www.dberp.com.cn
 */

namespace App\Services\Plugin;

use App\Exceptions\SupportCenter\SupportCenterException;

/**
 * 识别支撑中心「目录为空 / 暂无已上架发行」类业务响应，与连通性失败区分。
 */
final class HostPluginCatalogEmptyResponseDetector
{
    /**
     * @var list<string>
     */
    private const EMPTY_CATALOG_ERROR_CODES = [
        'plugin_catalog_empty',
        'plugin_catalog_unavailable',
        'plugin_catalog_not_available',
        'no_published_plugin_releases',
        'plugin_releases_not_available',
        'plugin_releases_empty',
    ];

    public function matches(SupportCenterException $exception): bool
    {
        $code = strtolower(trim((string) ($exception->errorCode() ?? '')));

        if ($code !== '' && in_array($code, self::EMPTY_CATALOG_ERROR_CODES, true)) {
            return true;
        }

        $message = trim($exception->userFacingMessage());

        if ($message === '') {
            return false;
        }

        return str_contains($message, '暂无可用的已上架插件发行')
            || str_contains($message, '插件目录不可用');
    }
}
