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


import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.experimentalData.domain.TsFiles;
import com.yfd.platform.modules.specialDocument.domain.Files;
import com.yfd.platform.modules.specialDocument.service.IFilesService;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import org.springframework.web.multipart.MultipartFile;

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

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

    //专项文档服务类
    @Resource
    private IFilesService filesService;


    /**********************************
     * 用途说明: 分页查询专项文档管理-文档内容
     * 参数说明
     * fileName      文件名称
     * startDate     (开始日期)
     * endDate      （结束日期）
     * keywords      关键字
     *nodeId         节点ID
     *projectId      所属项目ID
     * pageNum 当前页
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回分页查询结果
     ***********************************/
    @Log(module = "专项文档管理", value = "分页查询专项文档管理文档内容")
    @GetMapping("/page")
    @ApiOperation("分页查询专项文档管理文档内容")
    @PreAuthorize("@el.check('select:files')")
    public ResponseResult getFilesPage(String fileName, String startDate, String endDate, String keywords, String nodeId,String projectId, Page<Files> page) throws Exception {
        //分页查询
        int currentPage = (int) page.getCurrent();
        // 先尝试从缓存获取
        IPage<Files> cachedFilesPage = filesService.getCachedFilesPage(projectId, nodeId,currentPage );
        if (cachedFilesPage != null){
            return ResponseResult.successData(cachedFilesPage);
        }

        Page<Files> filesPage = filesService.getFilesPage(fileName, startDate, endDate, keywords, nodeId, projectId, fileName,  page);
        return ResponseResult.successData(filesPage);
    }


    /***********************************
     * 用途说明：新增专项文档管理-文档内容
     * 参数说明
     * Files     文档内容
     * sourcePath     源路径
     * targetPath     目标路径
     * 返回值说明:  com.yfd.platform.config.ResponseResult 返回新增成功或者失败
     ***********************************/
    @Log(module = "专项文档管理", value = "新增专项文档管理文档内容！")
    @PostMapping("/addFiles")
    @ApiOperation("新增专项文档管理文档内容")
    @ResponseBody
    @PreAuthorize("@el.check('add:files')")
    public ResponseResult addFiles(@RequestBody Files files,String sourcePath,String targetPath) throws Exception {
        //对象不能为空
        if (ObjUtil.isEmpty(files)) {
            return ResponseResult.error("参数为空");
        }
        if (StrUtil.isEmpty(sourcePath)) {
            return ResponseResult.error("源路径参数为空");
        }
        if (StrUtil.isEmpty(targetPath)) {
            return ResponseResult.error("目标路径参数为空");
        }
        return filesService.addFiles(files,sourcePath,targetPath);

    }

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


    /**********************************
     * 用途说明: 根据ID删除专项文档管理-文档内容
     * 参数说明  id 文档内容ID
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回删除成功或者失败
     ***********************************/
    @Log(module = "专项文档管理", value = "根据ID删除专项文档管理文档内容")
    @PostMapping("/deleteFilesById")
    @ApiOperation("根据ID删除专项文档管理文档内容")
    @PreAuthorize("@el.check('del:systemdevice')")
    public ResponseResult deleteFilesById(@RequestParam String id) {
        if (StrUtil.isBlank(id)) {
            return ResponseResult.error("参数为空");
        }
        List<String> dataset = Arrays.asList(id);
        return ResponseResult.success(filesService.deleteFilesByIds(dataset));
    }


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



}
