package com.infoepoch.pms.agent.platform.model.application.dto;

import com.infoepoch.pms.agent.platform.model.domain.AiModelProvider;
import lombok.Getter;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * 模型供应商响应 DTO。
 */
@Getter
public class ProviderResponse {

    /**
     * 供应商 ID。
     */
    private final String id;
    /**
     * 供应商名称。
     */
    private final String name;
    /**
     * 供应商类型。
     */
    private final String type;
    /**
     * API 基础地址。
     */
    private final String baseUrl;
    /**
     * 脱敏后的 API Key。
     */
    private final String apiKey;
    /**
     * 自定义请求头。
     */
    private final Map<String, String> customHeaders;
    /**
     * 供应商描述。
     */
    private final String description;
    /**
     * 是否启用。
     */
    private final boolean active;
    /**
     * 创建时间。
     */
    private final LocalDateTime createdAt;
    /**
     * 更新时间。
     */
    private final LocalDateTime updatedAt;

    /**
     * 根据实体构造响应 DTO。
     *
     * @param provider 供应商实体
     */
    public ProviderResponse(AiModelProvider provider) {
        this.id = provider.getId();
        this.name = provider.getName();
        this.type = provider.getType();
        this.baseUrl = provider.getBaseUrl();
        this.apiKey = maskApiKey(provider.getApiKey());
        this.customHeaders = provider.getCustomHeaders();
        this.description = provider.getDescription();
        this.active = provider.isActive();
        this.createdAt = provider.getCreatedAt();
        this.updatedAt = provider.getUpdatedAt();
    }

    /**
     * 脱敏规则：
     * - null / blank → null
     * - 长度 ≤ 6 → "******"
     * - 否则 → 首4位 + "****" + 末2位
     */
    static String maskApiKey(String plainKey) {
        if (plainKey == null || plainKey.isBlank()) return null;
        if (plainKey.length() <= 6) return "******";
        return plainKey.substring(0, 4) + "****" + plainKey.substring(plainKey.length() - 2);
    }
}
