class_name StringUtils

# 字符串工具类 - 提供常用的字符串处理功能

# 验证邮箱格式
static func is_valid_email(email: String) -> bool:
	var regex = RegEx.new()
	regex.compile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$")
	return regex.search(email) != null

# 验证用户名格式（字母、数字、下划线）
static func is_valid_username(username: String) -> bool:
	if username.is_empty() or username.length() > 50:
		return false
	
	var regex = RegEx.new()
	regex.compile("^[a-zA-Z0-9_]+$")
	return regex.search(username) != null

# 验证密码强度
static func validate_password_strength(password: String) -> Dictionary:
	var result = {"valid": false, "message": "", "strength": 0}
	
	if password.length() < 8:
		result.message = "密码长度至少8位"
		return result
	
	if password.length() > 128:
		result.message = "密码长度不能超过128位"
		return result
	
	var has_letter = false
	var has_digit = false
	var has_special = false
	
	for i in range(password.length()):
		var char = password[i]
		if char >= 'a' and char <= 'z' or char >= 'A' and char <= 'Z':
			has_letter = true
		elif char >= '0' and char <= '9':
			has_digit = true
		elif char in "!@#$%^&*()_+-=[]{}|;:,.<>?":
			has_special = true
	
	var strength = 0
	if has_letter:
		strength += 1
	if has_digit:
		strength += 1
	if has_special:
		strength += 1
	if password.length() >= 12:
		strength += 1
	
	result.strength = strength
	
	if not (has_letter and has_digit):
		result.message = "密码必须包含字母和数字"
		return result
	
	result.valid = true
	result.message = "密码强度: " + ["弱", "中", "强", "很强"][min(strength - 1, 3)]
	return result

# 截断字符串
static func truncate(text: String, max_length: int, suffix: String = "...") -> String:
	if text.length() <= max_length:
		return text
	return text.substr(0, max_length - suffix.length()) + suffix

# 首字母大写
static func capitalize_first(text: String) -> String:
	if text.is_empty():
		return text
	return text[0].to_upper() + text.substr(1)

# 转换为标题格式（每个单词首字母大写）
static func to_title_case(text: String) -> String:
	var words = text.split(" ")
	var result = []
	for word in words:
		if not word.is_empty():
			result.append(capitalize_first(word.to_lower()))
	return " ".join(result)

# 移除HTML标签
static func strip_html_tags(html: String) -> String:
	var regex = RegEx.new()
	regex.compile("<[^>]*>")
	return regex.sub(html, "", true)

# 格式化文件大小
static func format_file_size(bytes: int) -> String:
	var units = ["B", "KB", "MB", "GB", "TB"]
	var size = float(bytes)
	var unit_index = 0
	
	while size >= 1024.0 and unit_index < units.size() - 1:
		size /= 1024.0
		unit_index += 1
	
	if unit_index == 0:
		return str(int(size)) + " " + units[unit_index]
	else:
		return "%.1f %s" % [size, units[unit_index]]
