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.QuestionEditRequestDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

/**
 * 题目编辑时内容校验（可选字段）
 */
@Slf4j
@Component
public class QuestionEditContentVerifyChain implements AbstractChianHandler<QuestionEditRequestDTO> {

	@Override
	public void handle(QuestionEditRequestDTO requestParam) {
		String content = requestParam.getContent();

		// 内容是可选的，如果为空则跳过校验
		if (StringUtils.isBlank(content)) {
			return;
		}

		// 如果提供了内容，则进行校验
		if (content.length() < 20) {
			throw new ClientException("题目内容过短，至少需要20个字符", ErrorCode.PARAMS_ERROR);
		}

		if (content.length() > 10000) {
			throw new ClientException("题目内容过长，最多支持10000个字符", ErrorCode.PARAMS_ERROR);
		}

		log.debug("题目编辑内容校验通过");
	}

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

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