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


import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.annotation.Log;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.modules.specialDocument.domain.Project;
import com.yfd.platform.modules.specialDocument.service.IProjectService;
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.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 专项项目表 前端控制器
 * </p>
 *
 * @author LiMengNan
 * @since 2025-01-20
 */
@RestController
@RequestMapping("/specialDocument/project")
public class ProjectController {

    //专项项目服务类
    @Resource
    private IProjectService projectService;

    /**********************************
     * 用途说明: 分页查询专项文档管理-项目管理
     * 参数说明
     * description   项目描述
     * projectType   项目类型
     *projectName    项目名称
     * pageNum 当前页
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回分页查询结果
     ***********************************/
    @GetMapping("/page")
    @ApiOperation("分页查询专项文档管理项目管理")
    @PreAuthorize("@el.check('select:project')")
    public ResponseResult getSdProjectPage(String description, String projectType, String projectName, Page<Project> page) {
        //分页查询
        Page<Project> sdProjectPage = projectService.getSdProjectPage(description, projectType, projectName, page);
        return ResponseResult.successData(sdProjectPage);
    }

    /***********************************
     * 用途说明：新增专项文档管理-项目管理
     * 参数说明
     * Project     项目管理
     * 返回值说明:  com.yfd.platform.config.ResponseResult 返回新增成功或者失败
     ***********************************/
    @Log(module = "专项文档管理", value = "新增专项文档管理项目管理！",type = "1")
    @PostMapping("/addSdproject")
    @ApiOperation("新增专项文档管理项目管理")
    @ResponseBody
    @PreAuthorize("@el.check('add:project')")
    public ResponseResult addSdproject(@RequestBody Project project) {
        //对象不能为空
        if (ObjUtil.isEmpty(project)) {
            return ResponseResult.error("参数为空");
        }
        Boolean isOk = projectService.addSdproject(project);
        if (isOk) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }


    /**********************************
     * 用途说明: 修改专项文档管理-项目管理
     * 参数说明
     * Project     项目管理
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回修改成功或者失败
     ***********************************/
    @Log(module = "专项文档管理", value = "修改专项文档管理项目管理",type = "1")
    @PostMapping("/updateSdproject")
    @ApiOperation("修改专项文档管理项目管理")
    @PreAuthorize("@el.check('update:project')")
    public ResponseResult updateSdproject(@RequestBody Project project) {
        //对象不能为空
        if (ObjUtil.isEmpty(project) && StrUtil.isBlank(project.getId())) {
            return ResponseResult.error("参数为空");
        }
        boolean isOk = projectService.updateSdproject(project);
        if (isOk) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }


    /**********************************
     * 用途说明: 根据ID删除专项文档管理-项目管理
     * 参数说明  id 项目管理ID
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回删除成功或者失败
     ***********************************/
    @Log(module = "专项文档管理", value = "根据ID删除专项文档管理项目管理",type = "1")
    @PostMapping("/deleteSdprojectById")
    @ApiOperation("根据ID删除专项文档管理项目管理")
    @PreAuthorize("@el.check('del:project')")
    public ResponseResult deleteSdprojectById(@RequestParam String id) {
        if (StrUtil.isBlank(id)) {
            return ResponseResult.error("参数为空");
        }
        List<String> dataset = new ArrayList<>();
        dataset.add(id);
        boolean isOk = projectService.deleteProjectByIds(dataset);
        if (isOk) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }


    /**********************************
     * 用途说明: 批量删除专项文档管理-项目管理
     * 参数说明  ids 项目管理id数组
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回批量删除成功或失败
     ***********************************/
    @Log(module = "专项文档管理", value = "批量删除专项文档管理项目管理",type = "1")
    @PostMapping("/deleteSdprojectByIds")
    @ApiOperation("批量删除专项文档管理项目管理")
    @PreAuthorize("@el.check('del:project')")
    public ResponseResult deleteSdprojectByIds(@RequestParam String ids) {
        if (StrUtil.isBlank(ids)) {
            return ResponseResult.error("参数为空");
        }
        String[] splitIds = ids.split(",");
        // 数组转集合
        List<String> dataset = Arrays.asList(splitIds);
        boolean isOk = projectService.deleteProjectByIds(dataset);
        if (isOk) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }

    /***********************************
     * 用途说明： 查询所有专项文档管理-项目管理
     * 参数说明
     * 返回值说明:  专项文档管理项目管理数据
     ***********************************/
    @PostMapping("/list")
    @ApiOperation("查询所有专项文档管理项目管理")
    @ResponseBody
    //@PreAuthorize("@el.check('select:devicesignal')")
    public ResponseResult listSdproject() {
        LambdaQueryWrapper<Project> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.orderByDesc(Project::getProjectTime);
        List<Project> projects = projectService.list(queryWrapper);
        return ResponseResult.successData(projects);
    }


}
