package com.huimv.employment.service.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * AI 内网工具接口配置，绑定 {@code fe.internal.*}。
 */
@ConfigurationProperties(prefix = "fe.internal")
public class InternalApiProperties {

    /** 是否启用 MCP 工具接口（/api/mcp/**） */
    private boolean enabled = true;

    /**
     * 服务密钥，请求头 {@code X-Fe-Ai-Key} 须与此一致。
     * 为空时不校验密钥（仅建议本地开发）。
     */
    private String aiKey = "";

    /** 可选 IP 白名单；为空表示不限制来源 IP */
    private List<String> allowedIps = new ArrayList<>();

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public String getAiKey() {
        return aiKey;
    }

    public void setAiKey(String aiKey) {
        this.aiKey = aiKey;
    }

    public List<String> getAllowedIps() {
        return allowedIps;
    }

    public void setAllowedIps(List<String> allowedIps) {
        this.allowedIps = allowedIps != null ? allowedIps : new ArrayList<>();
    }

    public boolean requiresAiKey() {
        return StringUtils.hasText(aiKey);
    }

    public boolean hasIpRestriction() {
        return allowedIps != null && !allowedIps.isEmpty();
    }

    public boolean isAllowedIp(String clientIp) {
        if (!hasIpRestriction()) {
            return true;
        }
        if (!StringUtils.hasText(clientIp)) {
            return false;
        }
        return allowedIps.contains(clientIp.trim());
    }

    public List<String> getAllowedIpsView() {
        return allowedIps == null ? Collections.emptyList() : Collections.unmodifiableList(allowedIps);
    }
}
