<?php

declare(strict_types=1);

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

namespace App\Support;

use App\Models\DberpSystemProfile;
use Illuminate\Support\Facades\Schema;

/**
 * 产品对外品牌名：未授权固定默认名；已授权可读系统档案与配置。
 */
final class DberpProductBranding
{
    public function __construct(
        private readonly DberpCommercialLicense $commercialLicense,
    ) {}

    public function defaultBrandName(): string
    {
        $name = config('dberp.product.default_brand_name');

        if (is_string($name) && trim($name) !== '') {
            return trim($name);
        }

        return (string) config('dberp.version.installer_title_base', 'DBErp 进销存系统');
    }

    public function canCustomizeDisplayName(): bool
    {
        return $this->commercialLicense->isGranted();
    }

    public function displayName(): string
    {
        if (! $this->canCustomizeDisplayName()) {
            return $this->defaultBrandName();
        }

        return $this->resolvedLicensedDisplayName();
    }

    /**
     * 登录页左下角：未授权或仍使用默认产品名时展示官网链接与版本；已授权且改为自定义名称时仅展示 © 与名称。
     */
    public function showsOfficialLoginFooterBranding(): bool
    {
        if (! $this->canCustomizeDisplayName()) {
            return true;
        }

        return $this->displayName() === $this->defaultBrandName();
    }

    private function resolvedLicensedDisplayName(): string
    {
        $publicOverride = config('dberp.public_product.name');
        if (is_string($publicOverride) && trim($publicOverride) !== '') {
            return trim($publicOverride);
        }

        if (Schema::hasTable('dberp_system_profile')) {
            $fromDatabase = DberpSystemProfile::query()->value('system_display_name');
            if (is_string($fromDatabase) && trim($fromDatabase) !== '') {
                return trim($fromDatabase);
            }
        }

        $fromEnv = config('dberp.product.name');
        if (is_string($fromEnv) && trim($fromEnv) !== '') {
            return trim($fromEnv);
        }

        return $this->defaultBrandName();
    }
}
