package com.jeesharp.business.modules.pay.paychannelconfig.support;

import cn.hutool.core.util.StrUtil;
import com.jeesharp.framework.exception.BizErrorException;

/**
 * 支付渠道租户 ID 规范化：空串视为未指定租户；平台级维度另见 {@link #isPlatformLevel}。
 *
 * @author jeesharp
 * @since 2026-05-25
 */
public final class PayChannelTenantSupport {

    /** 平台级支付配置的租户编码（与 sys 租户 code=1 一致） */
    public static final String PLATFORM_TENANT_CODE = "1";

    /** 平台级租户主键约定值（与前端路由、sys 租户 id 对齐；库表可为空或本值） */
    public static final String PLATFORM_TENANT_ID = "1";

    private PayChannelTenantSupport() {
    }

    /**
     * 是否为平台级渠道配置（tenant_code=1，不可删除，仅允许改回调地址类字段）。
     */
    public static boolean isPlatformTenantCode(String tenantCode) {
        if (tenantCode == null) {
            return false;
        }
        return PLATFORM_TENANT_CODE.equals(tenantCode.trim());
    }

    /**
     * 删除前校验：平台级配置（tenant_code=1）禁止删除。
     */
    public static void assertDeletableTenantCode(String tenantCode) {
        if (isPlatformTenantCode(tenantCode)) {
            throw new BizErrorException("平台支付渠道配置不允许删除");
        }
    }

    public static String normalize(String tenantId) {
        if (tenantId == null) {
            return null;
        }
        String t = tenantId.trim();
        return t.isEmpty() ? null : t;
    }

    /**
     * 是否为平台级租户维度：未传、空串，或约定平台租户 id（{@link #PLATFORM_TENANT_ID}）。
     */
    public static boolean isPlatformLevel(String tenantId) {
        String n = normalize(tenantId);
        if (n == null) {
            return true;
        }
        return PLATFORM_TENANT_ID.equals(n);
    }

    /**
     * 持久化用租户键：平台级存空串，便于 MySQL 5.7 对 tenant_id 建唯一索引（每租户仅一条）。
     */
    public static String toStorageKey(String tenantId) {
        String n = normalize(tenantId);
        return n == null ? "" : n;
    }
}
