package com.persagy.server.services.rel

import com.persagy.server.datacenter.models.entities.rel.RSpinBd
import com.persagy.server.datacenter.models.entities.rel.RSpinFl
import com.persagy.database.SFilter
import com.persagy.mybatis.SMybatisDao
import com.persagy.service.SObjectService
import com.persagy.service.SPageContext
import com.persagy.service.models.enums.SResponseType
import com.persagy.service.models.requests.SCreateRequest
import com.persagy.service.models.requests.SUpdateRequest
import com.persagy.service.models.responses.SBaseResponse
import com.persagy.service.models.responses.SCreateResponse

/**
 * 业务空间所在的楼层
 *
 * @author 张维新
 */
object RSpInFlService: SObjectService<RSpinFl>(SMybatisDao(RSpinFl::class.java)) {

    /**
     * 创建业务空间和建筑、楼层的关系
     * 未明确楼层 1 和 未明确建筑 1
     *
     */
    fun  spInBdOrFlCreates(rSiInSpBase: SCreateRequest<RSpinFl>): SCreateResponse<RSpinFl> {
        try {
            val projectId = SPageContext.getHeader("ProjectId")
            val contentList = rSiInSpBase.content
            if (contentList.isNotEmpty()){
                for (rSpinFl in contentList){

                    if (rSpinFl.objectType.isNullOrEmpty()){
                        val sCreateResponse = SCreateResponse<RSpinFl>(SResponseType.failure)
                        sCreateResponse.message = "空间类型不能为空"
                        return  sCreateResponse
                    }
                    /** 建筑关系  */
                    if (!rSpinFl.objectType.isNullOrEmpty()&&!rSpinFl.buildingId.isNullOrEmpty()&&!rSpinFl.spaceId.isNullOrEmpty()&&rSpinFl.buildingId!="1"){
                        try {
                            val rSpinBd = RSpinBd()
                            rSpinBd.projectId = projectId
                            rSpinBd.spaceId = rSpinFl.spaceId
                            rSpinBd.buildingId = rSpinFl.buildingId
                            rSpinBd.objectType = rSpinFl.objectType
                            RSpInBdService.insert(rSpinBd)
                        } catch (e: Exception) {
                            e.printStackTrace()
                        }
                    }
                    /** 楼层关系 */
                    if (!rSpinFl.objectType.isNullOrEmpty()&&!rSpinFl.floorId.isNullOrEmpty()&&!rSpinFl.spaceId.isNullOrEmpty()&&rSpinFl.floorId!="1"){
                        rSpinFl.projectId = projectId
                        try {
                            val insert = insert(rSpinFl)
                            if (insert){
                                /** 关系创建成功 */
                            }
                        } catch (e: Exception) {
                            e.printStackTrace()
                        }
                    }
                }
                val sCreateResponse = SCreateResponse<RSpinFl>(SResponseType.success)
                return sCreateResponse
            }else{
                val sCreateResponse = SCreateResponse<RSpinFl>(SResponseType.failure)
                sCreateResponse.message = "列表不可以为空"
                return sCreateResponse
            }
        } catch (e: Exception) {
            e.printStackTrace()
            return SCreateResponse(SResponseType.failure,e.message.toString())
        }
    } // Function spInBdOrFlCreates()

    /**
     * 删除业务空间也楼层的关系
     */
    fun spInBdDeLs(rSpinBdList: ArrayList<RSpinFl>): SBaseResponse {
        try {
            val projectId = SPageContext.getHeader("ProjectId")
            if (!rSpinBdList.isNullOrEmpty()){
                for (rSpinBd in rSpinBdList){
                    if (!rSpinBd.spaceId.isNullOrEmpty()&&!rSpinBd.floorId.isNullOrEmpty()){
                        rSpinBd.projectId = projectId
                        val delete = delete(rSpinBd)
                        if (delete){
                            /** 删除成功 */
                        }
                    }else{
                        val sBaseResponse = SBaseResponse(SResponseType.failure)
                        sBaseResponse.message = "spaceId和buildingId 不可以为空"
                        return sBaseResponse
                    }
                }
                return SBaseResponse(SResponseType.success)
            }else{
                val sBaseResponse = SBaseResponse(SResponseType.failure)
                sBaseResponse.message = "列表不能为空"
                return sBaseResponse
            }
        } catch (e: Exception) {
            e.printStackTrace()
            return SBaseResponse(SResponseType.failure, e.message!!)
        }
    } // Function spInBdDeLs()

    /**
     * 修改业务空间所在的楼层
     */
    fun spInBdUpdates(request: SUpdateRequest<RSpinFl>): SBaseResponse{
        try {
            val projectId = SPageContext.getHeader("ProjectId")
            val contentList = request.content
            if (!contentList.isNullOrEmpty()){

                for (content in contentList){
                    if (!content.floorId.isNullOrEmpty()&&!content.spaceId.isNullOrEmpty()&&!content.objectType.isNullOrEmpty()){

                        try {
                            val delete = delete(SFilter.eq("projectId", projectId!!), SFilter.eq("SpaceId", content.spaceId!!))
                            if (delete){
                                /** 删除原始的空间和建筑的数据 */

                            }
                        } catch (e: Exception) {
                            e.printStackTrace()
                        }

                        val insert = insert(content)
                        if (insert){
                            /** 添加关系 */
                        }

                    }else{
                        val sBaseResponse = SBaseResponse(SResponseType.failure)
                        sBaseResponse.message = "buildingId、spaceId、objectType 不能为空"
                        return sBaseResponse
                    }
                }
                return SBaseResponse(SResponseType.success)
            }else{
                val sBaseResponse = SBaseResponse(SResponseType.failure)
                sBaseResponse.message = "列表不能为空"
                return sBaseResponse
            }
        } catch (e: Exception) {
            e.printStackTrace()
            return SBaseResponse(SResponseType.failure,e.message.toString())
        }
    } // Function spInBdUpdates()

} // Object RSpInBdService