<?php

declare(strict_types=1);

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

namespace App\Support\Plugin;

/**
 * 从 plugin.json 推导插件 PSR-4 命名空间前缀。
 */
final class PluginAutoloadNamespaceResolver
{
    /**
     * @param  array<string, mixed>  $manifest
     */
    public static function resolve(array $manifest): ?string
    {
        $explicit = trim((string) ($manifest['autoload_namespace'] ?? ''));

        if ($explicit !== '') {
            return str_ends_with($explicit, '\\') ? $explicit : $explicit.'\\';
        }

        $entryClass = trim((string) ($manifest['entry_class'] ?? ''));

        if ($entryClass !== '') {
            return self::namespaceFromClassName($entryClass);
        }

        $providers = $manifest['providers'] ?? null;

        if (! is_array($providers)) {
            return null;
        }

        foreach ($providers as $provider) {
            if (! is_string($provider)) {
                continue;
            }

            $providerClass = trim($provider);

            if ($providerClass === '') {
                continue;
            }

            $namespace = self::namespaceFromClassName($providerClass);

            if ($namespace !== null) {
                return $namespace;
            }
        }

        return null;
    }

    public static function namespaceFromClassName(string $className): ?string
    {
        $normalized = ltrim(trim($className), '\\');
        $separatorPosition = strrpos($normalized, '\\');

        if ($separatorPosition === false) {
            return null;
        }

        return substr($normalized, 0, $separatorPosition + 1);
    }
}
