package com.persagy.server.services.assistant

import com.persagy.database.SFilter
import com.persagy.server.datacenter.dao.mappers.SchemeMapper
import com.persagy.server.services.objects.FloorService
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service

/**
 * 数据中心 方案导入服务
 *
 * @author 张维新
 */
@Service
open class SchemeService {

    companion object {
        /** 日志 */
        private val logger = LoggerFactory.getLogger(SchemeService::class.java)
    } // Companion object

    /** 实例化 mapper 对象 */
    @Autowired
    lateinit var mapper: SchemeMapper

    /**
     * 导入方案处理
     *
     * @param      projectId        项目id
     * @param      schemeId         方案id
     */
    fun setScheme(projectId: String, schemeId: String):Boolean{
        try {
            mapper.setSchemeDict(projectId,schemeId)
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return true
    } // Function setScheme()

    /**
     * 导入自定义信息点
     *
     * @param      projectId        项目id
     * @param      schemeId         方案id
     */
    fun setSchemeCustomDict(projectId: String, schemeId: String):Boolean{
        try {
            mapper.setSchemecustomDict(projectId,schemeId)
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return true
    } // Function setSchemeCustomDict()

    /**
     * 导入自定义信息点
     *
     * @param      projectId        项目id
     * @param      schemeId         方案id
     */
    fun setSchemeCustomDictFalse(projectId: String, schemeId: String):Boolean{
        try {
            mapper.setSchemecustomDictFalse(projectId,schemeId)
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return true
    } // Function setSchemeCustomDict()

    /**
     * 导入原始字典信息
     *
     * @param      projectId        项目id
     */
    fun setControlDict(projectId: String):Boolean{
        try {
            mapper.setControlDict(projectId)
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return true
    } // Function setControlDict()


    /**
     * 处理自定义自定数据
     */
    fun setDictCustom():Boolean{
        try {
            val dict = mapper.setDict()
            return dict
        } catch (e: Exception) {
            e.printStackTrace()
            return false
        }
    }

    /**
     * 修改设备和元空间的建筑楼层
     */
    fun rupdateEquipiSpace(projectId: String,oldBimId: String?,bimId: String,floorId: String,floorMap: String,modelId: String,attributeMap: HashMap<String,Any>?): Boolean{
       return  try {
           var oldBimIdNew = ""
           if (!oldBimId.isNullOrEmpty()){
               oldBimIdNew = oldBimId
           }
            val rUpDateEquipAndSapce = mapper.rUpDateEquipAndSapce(projectId, oldBimIdNew, bimId, floorId)

           val floorEntity = FloorService.select(SFilter.eq("id", floorId)).entity()
           if (floorEntity!=null){

               if (!floorEntity.structureInfo.isNullOrEmpty()){
                   val containsKey = floorEntity.structureInfo!!.containsKey("FloorMap")

                   if (containsKey){
                       floorEntity.structureInfo!!["FloorMap"] = floorMap
                   }else{
                       floorEntity.structureInfo!!["FloorMap"] = floorMap
                   }
               }else{
                   val map = HashMap<String,Any?>()
                   map["FloorMap"] = floorMap
                   floorEntity.structureInfo = map
               }
               floorEntity.modelId = modelId
               /** 处理楼层标高 */
               if (!attributeMap.isNullOrEmpty()&&attributeMap.size>0){
                   val containsKey = attributeMap.containsKey("FloorElevation")
                   if (containsKey){
                       try {
                           val toDouble = attributeMap["FloorElevation"]!!.toString().toDouble()
                           if (toDouble!=null){
                               floorEntity.structureInfo!!["FloorElevation"] = toDouble!!/1000
                           }
                       } catch (e: Exception) {
                           e.printStackTrace()
                       }
                   }
               }
               var list = ArrayList<SFilter>()
               list.add(SFilter.eq("id",floorId))
               FloorService.update(floorEntity,null,list)
           }
           return rUpDateEquipAndSapce
        } catch (e: Exception) {
            e.printStackTrace()
            false
        }
    } // Fun

    fun dictInfo(projectId: String, groupId: String,  code:String){
        mapper.dictInfo(projectId,groupId,code)
    } // Fun

} // Class SchemeService