package cn.meowrain.aioj.backend.question.dto.chains;

import cn.meowrain.aioj.backend.framework.core.designpattern.chains.AbstractChianHandler;
import cn.meowrain.aioj.backend.framework.core.errorcode.ErrorCode;
import cn.meowrain.aioj.backend.framework.core.exception.ClientException;
import cn.meowrain.aioj.backend.question.common.enums.ChainMarkEnums;
import cn.meowrain.aioj.backend.question.dto.req.QuestionCreateRequestDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

/**
 * 题目标题校验责任链处理器
 */
@Component
@Slf4j
public class QuestionTitleVerifyChain implements AbstractChianHandler<QuestionCreateRequestDTO> {

	@Override
	public void handle(QuestionCreateRequestDTO requestParam) {
		String title = requestParam.getTitle();

		// 校验标题不为空（虽然 @NotBlank 已经处理，但责任链可以提供更详细的业务校验）
		if (StringUtils.isBlank(title)) {
			throw new ClientException("题目标题不能为空", ErrorCode.PARAMS_ERROR);
		}

		// 校验标题长度
		if (title.length() < 2) {
			throw new ClientException("题目标题长度不能少于2个字符", ErrorCode.PARAMS_ERROR);
		}

		if (title.length() > 100) {
			throw new ClientException("题目标题长度不能超过100个字符", ErrorCode.PARAMS_ERROR);
		}

		// 可以添加更多业务规则，比如不允许包含特殊字符等
		// if (title.contains("[deleted]")) {
		//     throw new ClientException("题目标题包含非法字符", ErrorCode.PARAMS_ERROR);
		// }

		log.debug("题目标题校验通过: {}", title);
	}

	@Override
	public String mark() {
		return ChainMarkEnums.QUESTION_CREATE_PARAM_VERIFY_CHAIN.getMark();
	}

	@Override
	public int getOrder() {
		return 10;
	}
}
