package com.jeesharp.business.modules.setting.convert;

import cn.hutool.core.util.StrUtil;
import com.jeesharp.business.modules.setting.dto.HelpArticleSaveDTO;
import com.jeesharp.business.modules.setting.entity.HelpArticle;
import com.jeesharp.business.modules.setting.vo.HelpArticleVO;
import com.jeesharp.business.modules.setting.vo.HelpArticleListVO;
import com.jeesharp.business.modules.setting.vo.HelpArticleQueryVO;
import com.jeesharp.framework.common.pojo.convert.BasePojoConvert;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;

/**
 * 帮助文章转换器
 *
 * @author jeesharp
 * @version 2026-02-05
 */
@Mapper
public interface HelpArticleConvert extends BasePojoConvert<HelpArticle, HelpArticleSaveDTO, HelpArticleVO, HelpArticleListVO, HelpArticleQueryVO> {

    HelpArticleConvert INSTANCE = Mappers.getMapper(HelpArticleConvert.class);

    // ==================== 转换方法 ====================

    /**
     * 将应用标识转换为对应的中文名称。
     *
     * @param app 应用标识，如"APP"、"WECHAT_MINI"等
     * @return 对应的中文名称，如果标识为空或未匹配到则返回原标识
     */
    @Named("appToName")
    default String appToName(String app) {
        if (StrUtil.isBlank(app)) {
            return "";
        }
        return switch (app) {
            case "APP" -> "APP客户端";
            case "WECHAT_MINI" -> "微信小程序";
            case "WECHAT_MP" -> "微信公众号";
            case "H5" -> "H5页面";
            case "PC" -> "PC端";
            default -> app;
        };
    }

    /**
     * 将状态码转换为对应的中文名称。
     *
     * @param status 状态码，0表示禁用，1表示启用，其他值表示未知
     * @return 对应的中文状态名称，如果输入为null则返回空字符串
     */
    @Named("statusToName")
    default String statusToName(Integer status) {
        if (status == null) {
            return "";
        }
        return switch (status) {
            case 0 -> "禁用";
            case 1 -> "启用";
            default -> "未知";
        };
    }

    /**
     * 将是否常见问题的状态码转换为对应的文本描述。
     *
     * @param isFaq 是否常见问题的状态码，null或0表示"否"，其他值表示"是"
     * @return 对应的文本描述，"是"或"否"
     */
    @Named("isFaqToText")
    default String isFaqToText(Integer isFaq) {
        if (isFaq == null || isFaq == 0) {
            return "否";
        }
        return "是";
    }

}
