package com.njcn.rdms.module.project.service.status;

import com.njcn.rdms.module.project.dal.dataobject.status.ObjectStatusModelDO;
import com.njcn.rdms.module.project.dal.mysql.status.ObjectStatusModelMapper;
import com.njcn.rdms.module.project.dal.mysql.status.ObjectStatusTransitionMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

/**
 * 状态机文案解析器：把动作 code / 状态 code 翻成 DB 状态机里的中文展示名，
 * 供错误提示等用户可见文案使用。查不到时回退原 code（不抛错）。
 * 权威源：rdms_object_status_transition.action_name / rdms_object_status_model.status_name。
 * 背景：TD-012（给用户看的 message 不外泄技术 token；技术诊断由 infra_api_access_log 承载）。
 */
@Component
public class StatusActionTextResolver {

    @Resource
    private ObjectStatusTransitionMapper transitionMapper;
    @Resource
    private ObjectStatusModelMapper statusModelMapper;

    /** 动作中文名；空入参或查不到时回退原 actionCode。 */
    public String actionName(String objectType, String actionCode) {
        if (!StringUtils.hasText(actionCode)) {
            return actionCode;
        }
        String name = transitionMapper.selectActionNameByObjectTypeAndAction(objectType, actionCode);
        return StringUtils.hasText(name) ? name : actionCode;
    }

    /** 状态中文名；空入参或查不到时回退原 statusCode。 */
    public String statusName(String objectType, String statusCode) {
        if (!StringUtils.hasText(statusCode)) {
            return statusCode;
        }
        ObjectStatusModelDO model = statusModelMapper.selectByObjectTypeAndStatusCode(objectType, statusCode);
        return model != null && StringUtils.hasText(model.getStatusName()) ? model.getStatusName() : statusCode;
    }
}
