package com.yfd.platform.modules.experimentalData.controller;


import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import com.yfd.platform.annotation.Log;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.modules.experimentalData.domain.TsNodes;
import com.yfd.platform.modules.experimentalData.service.ITsNodesService;
import com.yfd.platform.modules.experimentalData.service.ITsTaskService;
import com.yfd.platform.modules.specialDocument.domain.Nodes;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 试验任务节点表 前端控制器
 * </p>
 *
 * @author LiMengNan
 * @since 2025-01-21
 */
@RestController
@RequestMapping("/experimentalData/ts-nodes")
public class TsNodesController {


    //试验任务节点服务类
    @Resource
    private ITsNodesService tsNodesService;


    /***********************************
     * 用途说明：获取试验任务节点 树形结构
     * 参数说明
     *  nodeName        节点名称
     *  taskId        所属任务ID
     * 返回值说明:  专项文档节点树形结构
     ***********************************/
    @Log(module = "试验数据管理", value = "获取试验任务节点树形结构!")
    @PostMapping("/getTsNodesTree")
    @ApiOperation("获取试验任务节点树形结构")
    @ResponseBody
    @PreAuthorize("@el.check('select:tsnodes')")
    public ResponseResult getTsNodesTree(String nodeName, String taskId) {
        List<Map<String, Object>> list = tsNodesService.getTsNodesTree(nodeName,taskId);
        return ResponseResult.successData(list);
    }

    /**********************************
     * 用途说明: 增加试验任务节点
     * 参数说明  tsnodes  试验任务节点信息
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回增加成功或者失败
     ***********************************/
    @Log(module = "试验数据管理", value = "增加试验任务节点!")
    @PostMapping("/addTsNodes")
    @ApiOperation("增加试验任务节点")
    @PreAuthorize("@el.check('add:tsnodes')")
    public ResponseResult addTsNodes(@RequestBody TsNodes tsnodes) {
        //参数校验 对象    节点名称 所属任务ID
        if (ObjUtil.isEmpty(tsnodes) && StrUtil.isBlank(tsnodes.getNodeName()) && StrUtil.isBlank(tsnodes.getTaskId()) ) {
            return ResponseResult.error("参数为空");
        }
        return tsNodesService.addTsNodes(tsnodes);
    }


    /**********************************
     * 用途说明: 修改试验任务节点
     * 参数说明  tsnodes  试验任务节点信息
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回修改成功或者失败
     ***********************************/
    @Log(module = "试验数据管理", value = "修改试验任务节点!")
    @PostMapping("/updateTsNodes")
    @ApiOperation("修改试验任务节点")
    @PreAuthorize("@el.check('update:tsnodes')")
    public ResponseResult updateTsNodes(@RequestBody TsNodes tsnodes) {
        //参数校验 对象    节点名称 所属任务ID id
        if (ObjUtil.isEmpty(tsnodes) && StrUtil.isBlank(tsnodes.getNodeName()) && StrUtil.isBlank(tsnodes.getTaskId()) && StrUtil.isBlank(tsnodes.getNodeId())) {
            return ResponseResult.error("参数为空");
        }
        return tsNodesService.updateTsNodes(tsnodes);
    }

    /**********************************
     * 用途说明: 根据ID删除试验任务节点
     * 参数说明  id 试验任务节点ID
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回删除成功或者失败
     ***********************************/
    @Log(module = "试验数据管理", value = "根据ID删除试验任务节点!")
    @PostMapping("/deleteTsNodesById")
    @ApiOperation("根据ID删除试验任务节点")
    @PreAuthorize("@el.check('del:tsnodes')")
    public ResponseResult deleteTsNodesById(@RequestParam String id) {
        if (StrUtil.isBlank(id)) {
            return ResponseResult.error("参数为空");
        }
        boolean isOk = tsNodesService.deleteTsNodesById(id);
        if (isOk) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }

}
