package cn.sagacloud.server.datacenter.dao.mappers

import cn.sagacloud.server.datacenter.models.entities.Family
import cn.sagacloud.server.datacenter.models.entities.ModelKey
import org.apache.ibatis.annotations.Mapper
import org.apache.ibatis.annotations.Param
import org.apache.ibatis.annotations.Select
import org.springframework.stereotype.Repository

/**
 * 方案接口
 *
 * @author 张维新
 */
@Mapper
@Repository
interface SchemeMapper {

    /**
     * 导入方案
     */
    @Select("insert into dict.property_def_project_info(first_tag,first_name,second_tag,second_name,info_point_name,info_point_code,datatype,type,flag,inputmode,unit,datasource,note,priority,visible,editable,sort,un_disabled,project_id) \n" +
            "select first_tag,first_name,second_tag,second_name,info_point_name,info_point_code,datatype,type,flag,inputmode,unit,datasource,note,priority,visible,editable,sort,un_disabled,#{projectId} from dict.datacenter_property_def_scheme WHERE scheme_id = #{schemeId}")
    fun setSchemeDict(@Param("projectId") projectId:String, @Param("schemeId") schemeId:String)

    /**
     * 自定义信息点
     */
    @Select("insert into dict.property_def_project_info(first_tag,first_name,second_tag,second_name,info_point_name,info_point_code,datatype,type,flag,inputmode,unit,datasource,note,priority,visible,editable,sort,un_disabled,project_id) \n" +
            "select first_tag,first_name,second_tag,second_name,info_point_name,info_point_code,datatype,type,flag,inputmode,unit,datasource,note,priority,visible,editable,sort,un_disabled,#{projectId} from dict.data_platform_scheme_info WHERE scheme_id = #{schemeId}")
    fun setSchemecustomDict(@Param("projectId") projectId:String, @Param("schemeId") schemeId:String)

    /**
     * 自定义信息点
     */
    @Select("insert into dict.property_def_project_info(first_tag,first_name,second_tag,second_name,info_point_name,info_point_code,datatype,type,flag,inputmode,unit,datasource,note,priority,visible,editable,sort,un_disabled,project_id) \n" +
            "select first_tag,first_name,second_tag,second_name,info_point_name,info_point_code,datatype,type,flag,inputmode,unit,datasource,note,priority,False,editable,sort,un_disabled,#{projectId} from dict.data_platform_scheme_info WHERE scheme_id = #{schemeId}")
    fun setSchemecustomDictFalse(@Param("projectId") projectId:String, @Param("schemeId") schemeId:String)

    /**
     * 导入原始字典
     */
    @Select("insert into dict.property_def_project_info(first_tag,first_name,second_tag,second_name,info_point_name,info_point_code,datatype,type,flag,inputmode,unit,datasource,note,priority,visible,editable,sort,un_disabled,project_id) \n" +
            "select first_tag,first_name,second_tag,second_name,info_point_name,info_point_code,datatype,type,flag,inputmode,unit,datasource,note,priority,visible,editable,sort,un_disabled,#{projectId} from dict.property_def_control_info ")
    fun setControlDict(@Param("projectId") projectId:String)


    /**
     * 操作自定义字典表数据
     */
    @Select("SELECT dictcustom.dict()")
    fun setDict():Boolean

    @Select("SELECT update_equip_ispace(#{projectId},#{oldBimId},#{bimId},#{floorId})")
    fun rUpDateEquipAndSapce(@Param("projectId") projectId: String,@Param("oldBimId") oldBimId: String,@Param("bimId") bimId: String,@Param("floorId") floorId: String):Boolean


    /**
     * 统计项目下有多少种设备类型
     *
     */
    @Select("SELECT category as code,(SELECT name FROM dict.class_def WHERE id = category) FROM equipment WHERE project_id = #{projectId} GROUP BY category")
    fun equipType(@Param("projectId") projectId: String):ArrayList<Family>

    /**
     * 模型下载 key
     *
     * @param projectId     项目 id
     * @param floorId       楼层 id
     * @return 模型下载 key
     */
    @Select("SELECT bim_id as bimIdPre,model_id as key FROM equipment WHERE project_id = #{projectId} AND floor_id = #{floorId} AND not bim_id ISNULL LIMIT 1")
    fun modelKey(@Param("projectId") projectId: String,@Param("floorId") floorId: String): ModelKey

    /**
     * 查询模型文件 id
     */
    @Select("select  m.id as key ,(select floor_name from revit.model_floor where current_model_id in (m.id)) as file_name,(SELECT name FROM revit.model_folder WHERE id = #{id}) AS folder_name from  revit.model_file m where id in (select current_model_id from revit.model_floor where folder_id in (#{id}))")
    fun modelId(@Param("id") id: String): ArrayList<ModelKey>

}