package com.persagy.labsl.services

import com.persagy.database.SFilter
import com.persagy.labsl.models.entities.tpt.Markers
import com.persagy.mybatis.SMybatisDao
import com.persagy.service.SObjectService
import com.persagy.service.models.enums.SResponseType
import com.persagy.service.models.requests.SCreateRequest
import com.persagy.service.models.responses.SBaseResponse
import com.persagy.service.models.responses.SCreateResponse
import org.springframework.web.bind.annotation.RequestBody
import java.util.*

/**
 * 文本注释，图上的图片说明
 *
 * @author wx  <zhangweixin@sagacloud.com>
 */
object MarkersService : SObjectService<Markers>(SMybatisDao(
    Markers::class.java)) {
    /**
     * 创建说明
     *
     * @param request   创建的对象列表
     * @return 返回结果
     */
    fun creates(request: SCreateRequest<Markers>): SCreateResponse<Markers> {
        /** 返回结果对象 */
        val sCreateResponse = SCreateResponse<Markers>()
        /** 返回结果中的状态 */
        sCreateResponse.result = SResponseType.failure
        return try {
            /** 列表不可以为空 */
            if (!request.content.isNullOrEmpty()) {
                /** 遍历标记列表 */
                for (markers in request.content) {
                    /** 判断必传字段不可以为空 */
                    if (markers.id.isNullOrEmpty() || markers.graphId.isNullOrEmpty() || markers.name.isNullOrEmpty()) {
                        sCreateResponse.message = "注意必填字段不可以为空如 id、graphId、name"
                        return sCreateResponse
                    }
                    /** 查询 id 和 graphId 是否存在，是否可以定位一个系统图 */
                    val graphList =
                        GraphService.select(SFilter.eq("id", markers.id!!), SFilter.eq("graphId", markers.graphId!!))
                            .exec()
                    /** 图 id 和 graphId 不存在*/
                    if (graphList.size == 0) {
                        sCreateResponse.message = "请检查 id 和 graphId 是否为已有系统图中的 id"
                        return sCreateResponse
                    }
                }

                /** 遍历标记列表 */
                for (markers in request.content) {
                    /** 判断标记id是否没有，为空赋值 */
                    if (markers.markerId.isNullOrEmpty()) {
                        markers.markerId = UUID.randomUUID().toString().replace("-", "")
                    }

                    /** 插入数据 */
                    insert(markers)
                }
                /** 对象列表 */
                sCreateResponse.entityList = request.content
                /** 状态 */
                sCreateResponse.result = SResponseType.success
                /** 对象 */
                sCreateResponse
            } else {
                /** 描述 */
                sCreateResponse.message = "不可以传空列表"
                /** 对象 */
                return sCreateResponse
            }
        } catch (e: Exception) {
            e.printStackTrace()
            sCreateResponse.message = e.message!!
            sCreateResponse
        }
    }

    /**
     * 批量删除标识信息
     *
     * @param idList    标识信息对象列表
     * @return 返回结果
     */
    fun deletes(@RequestBody idList: ArrayList<Markers>): SBaseResponse {
        /** 返回结果对象 */
        val sBaseResponse = SBaseResponse()
        /** 返回结果状态 */
        sBaseResponse.result = SResponseType.failure
        return try {
            /** 列表不可以为空 */
            if (!idList.isNullOrEmpty()) {
                /** 遍历标签信息列表 */
                for (markers in idList) {
                    /** 校验必填信息点 */
                    if (markers.id.isNullOrEmpty() || markers.markerId.isNullOrEmpty()) {
                        sBaseResponse.message = "注意接口说明必填字段"
                        return sBaseResponse
                    }
                }

                /** 遍历标签信息列表 */
                for (markers in idList) {
                    /** 删除对象 */
                    delete(SFilter.eq("id",markers.id!!),SFilter.eq("markerId",markers.markerId!!))
                }

                /** 返回结果状态 */
                sBaseResponse.result = SResponseType.success
            }
            /** 返回结果对象 */
            sBaseResponse
        } catch (e: Exception) {
            e.printStackTrace()
            /** 返回结果，状态、以及报错信息 */
            SBaseResponse(SResponseType.failure,e.message!!)
        }
    }

}