package modelid

import (
	"errors"
	"regexp"
	"strings"
)

var providerIDRegex = regexp.MustCompile(`^[a-zA-Z0-9_]+$`)

// ParseUnifiedModelID 将 "provider_id/model_name" 格式的字符串解析为 providerID 和 modelName
// 在第一个 "/" 处分割，model_name 可以包含 "/"
func ParseUnifiedModelID(id string) (providerID, modelName string, err error) {
	if id == "" {
		return "", "", errors.New("统一模型 ID 不能为空")
	}

	parts := strings.SplitN(id, "/", 2)
	if len(parts) != 2 {
		return "", "", errors.New("统一模型 ID 格式错误，缺少分隔符 \"/\"")
	}

	providerID = parts[0]
	modelName = parts[1]

	if providerID == "" {
		return "", "", errors.New("provider_id 不能为空")
	}
	if modelName == "" {
		return "", "", errors.New("model_name 不能为空")
	}

	if !providerIDRegex.MatchString(providerID) {
		return "", "", errors.New("provider_id 仅允许字母、数字、下划线")
	}

	return providerID, modelName, nil
}

// FormatUnifiedModelID 将 providerID 和 modelName 组合格式化为统一模型 ID
func FormatUnifiedModelID(providerID, modelName string) string {
	return providerID + "/" + modelName
}

// ValidateProviderID 校验 providerID 仅包含字母、数字、下划线，长度 1-64
func ValidateProviderID(id string) error {
	if id == "" {
		return errors.New("provider_id 不能为空")
	}
	if len(id) > 64 {
		return errors.New("provider_id 长度不能超过 64 个字符")
	}
	if !providerIDRegex.MatchString(id) {
		return errors.New("provider_id 仅允许字母、数字、下划线")
	}
	return nil
}

// IsValidUnifiedModelID 判断字符串是否为合法的统一模型 ID 格式
func IsValidUnifiedModelID(id string) bool {
	_, _, err := ParseUnifiedModelID(id)
	return err == nil
}
