package com.yice.webadmin.app.model;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yice.common.core.annotation.RelationDict;
import com.yice.common.core.annotation.RelationGlobalDict;
import com.yice.common.core.base.mapper.BaseModelMapper;
import com.yice.common.core.base.model.BaseModel;
import com.yice.common.core.util.MyCommonUtil;
import com.yice.webadmin.app.vo.PromptTemplateVo;
import com.yice.webadmin.upms.model.SysUser;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.Map;

/**
 * PromptTemplate实体对象。
 *
 * @author linking
 * @date 2023-04-13
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "lmp_prompt_template")
public class PromptTemplate extends BaseModel {

    /**
     * 模板ID。
     */
    @TableId(value = "template_id")
    private Long templateId;


    /**
     * 模板名称。
     */
    private String templateName;

    /**
     * 模板标签。
     */
    private String templateLabel;

    /**
     * 浏览量。
     */
    private Long viewCount;

    /**
     * 模板内容。
     */
    private String templateContent;

    /**
     * 模板来源。
     */
    private Integer templateSource;

    /**
     * 场景类型。
     */
    private Integer scenarioType;

    /**
     * 参数格式。
     */
    private String parameterFormat;

    /**
     * 接口地址。
     */
    private String interfaceAddress;

    /**
     * 模板框架。
     */
    private Integer templateFramework;

    /**
     * 是否预置。
     */
    private Integer isPreset;

    /**
     * 是否收藏。
     */
    @TableField(exist = false)
    private Integer isCollect;

    /**
     * 模板变量。
     */
    private String templateVariables;

    /**
     * 逆向模板内容。
     */
    private String negativeTemplateContent;

    /**
     * 逆向模板变量。
     */
    private String negativeTemplateVariables;

    /**
     * template_name / template_content / negative_template_content LIKE搜索字符串。
     */
    @TableField(exist = false)
    private String searchString;

    public void setSearchString(String searchString) {
        this.searchString = MyCommonUtil.replaceSqlWildcard(searchString);
    }

    /**
     * 创建人名称字典。
     */
    @RelationDict(
            masterIdField = "createUserId",
            slaveModelClass = SysUser.class,
            slaveIdField = "userId",
            slaveNameField = "showName")
    @TableField(exist = false)
    private Map<String, Object> createUserIdDictMap;

    @RelationGlobalDict(
            masterIdField = "templateSource",
            dictCode = "TemplateSourceLabel")
    @TableField(exist = false)
    private Map<String, Object> templateSourceDictMap;

    @RelationGlobalDict(
            masterIdField = "scenarioType",
            dictCode = "ScenarioTypeLabel")
    @TableField(exist = false)
    private Map<String, Object> scenarioTypeDictMap;

    @RelationGlobalDict(
            masterIdField = "templateFramework",
            dictCode = "TemplateFrameworkLabel")
    @TableField(exist = false)
    private Map<String, Object> templateFrameworkDictMap;

    @RelationGlobalDict(
            masterIdField = "parameterFormat",
            dictCode = "ParameterFormatLabel")
    @TableField(exist = false)
    private Map<String, Object> parameterFormatDictMap;

    @Mapper
    public interface PromptTemplateModelMapper extends BaseModelMapper<PromptTemplateVo, PromptTemplate> {
        /**
         * 转换Vo对象到实体对象。
         *
         * @param promptTemplateVo 域对象。
         * @return 实体对象。
         */
        @Override
        PromptTemplate toModel(PromptTemplateVo promptTemplateVo);

        /**
         * 转换实体对象到VO对象。
         *
         * @param promptTemplate 实体对象。
         * @return 域对象。
         */
        @Override
        PromptTemplateVo fromModel(PromptTemplate promptTemplate);
    }

    public static final PromptTemplateModelMapper INSTANCE = Mappers.getMapper(PromptTemplateModelMapper.class);
}
