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.RelationOneToOne;
import com.yice.common.core.base.mapper.BaseModelMapper;
import com.yice.common.core.base.model.BaseModel;
import com.yice.webadmin.app.vo.ModelVersionVo;
import com.yice.webadmin.upms.model.SysUser;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

import java.util.Map;

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

    /**
     * 版本ID。
     */
    @TableId(value = "version_id")
    private Long versionId;

    /**
     * 模型ID。
     */
    private Long modelId;

    /**
     * 版本名称。
     */
    private String versionName;

    /**
     * 版本描述。
     */
    private String versionDescribe;

    /**
     * 开源协议。
     */
    private String protocol;

    /**
     * 协议链接。
     */
    private String protocolUrl;

    /**
     * 输入输出模式。
     */
    private String ioMode;

    /**
     * 版权信息。
     */
    private String copyright;

    /**
     * 模型版本号。
     */
    private Integer modelVersion;

    /**
     * 版本状态。
     */
    private Integer status;

    /**
     * 版本来源。
     */
    private String versionSource;

    /**
     * 基础模型。
     */
    private String baseModel;

    /**
     * 业务标签。
     */
    private String businessLabel;

    /**
     * 基础模型ID。
     */
    private Long baseId;

    /**
     * 模型训练方式。
     */
    private String modelTrainingMethod;

    /**
     * 运行名称。
     */
    private String runName;

    /**
     * 训练任务。
     */
    private String trainingTask;

    /**
     * 训练运行ID。
     */
    private Long runId;

    /**
     * 训练任务ID。
     */
    private Long taskId;
    /**
     * 模型地址。
     */
    private String modelUrl;

    /**
     * 是否被压缩。
     */
    private Integer isCompress;

    /**
     * 默认的提示词模板。
     */
    private String basePromptTemplate;

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


    @RelationOneToOne(
            masterIdField = "modelId",
            slaveModelClass = ModelManage.class,
            slaveIdField = "modelId")
    @TableField(exist = false)
    private ModelManage modelManage;

    @Mapper
    public interface ModelVersionModelMapper extends BaseModelMapper<ModelVersionVo, ModelVersion> {
        /**
         * 转换Vo对象到实体对象。
         *
         * @param modelVersionVo 域对象。
         * @return 实体对象。
         */
        @Mapping(target = "modelManage", expression = "java(mapToBean(modelVersionVo.getModelManage(), com.yice.webadmin.app.model.ModelManage.class))")
        @Override
        ModelVersion toModel(ModelVersionVo modelVersionVo);

        /**
         * 转换实体对象到VO对象。
         *
         * @param modelVersion 实体对象。
         * @return 域对象。
         */
        @Mapping(target = "modelManage", expression = "java(beanToMap(modelVersion.getModelManage(), false))")
        @Override
        ModelVersionVo fromModel(ModelVersion modelVersion);
    }

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