//package com.backendsys.controller.Med;
//
//import com.backendsys.aspect.HttpRequestAspect;
//import com.backendsys.entity.Med.MedMaterialDTO;
//import com.backendsys.entity.Med.MedMyMaterialDTO;
//import com.backendsys.mapper.Med.MedMaterialMapper;
//import com.backendsys.mapper.Med.MedMyMaterialMapper;
//import com.backendsys.entity.PageDTO;
//import com.backendsys.service.Med.MedMyMaterialService;
//import com.backendsys.utils.response.Result;
//import com.backendsys.utils.response.ResultEnum;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.security.access.prepost.PreAuthorize;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.Map;
//import java.util.Set;
//import java.util.HashSet;
//import java.util.List;
//import java.util.Arrays;
//
///**
// * 素材
// */
//@RestController
//public class MedMyMaterialController {
//
//    @Autowired
//    private HttpRequestAspect httpRequestAspect;
//
//    @Autowired
//    private MedMyMaterialService medMyMaterialService;
//
//    @Autowired
//    private MedMyMaterialMapper medMyMaterialMapper;
//
//    @Autowired
//    private MedMaterialMapper medMaterialMapper;
//
//    @PreAuthorize("@sr.hasPermission('21.1')")
//    @GetMapping("/api/med/material/getMyMaterial")
//    public Result getMyMaterial(@Validated PageDTO pageDTO, @Validated MedMyMaterialDTO medMyMaterialDTO) {
//
//        // [查询] 自身 UserId
//        Long user_id = httpRequestAspect.getUserId();
//        medMyMaterialDTO.setUser_id(user_id);
//
//        return Result.success(medMyMaterialService.queryMyMaterial(pageDTO.getPage_num(), pageDTO.getPage_size(), medMyMaterialDTO));
//    }
//
//    @PreAuthorize("@sr.hasPermission('21.1.1')")
//    @GetMapping("/api/med/material/getMyMaterialDetail")
//    public Result getMyMaterialDetail(@Validated(MedMyMaterialDTO.Detail.class) MedMyMaterialDTO medMyMaterialDTO) {
//
//        // 判断是否当前用户所有，不是则不可操作
//        Map<String, Object> myMaterial = medMyMaterialService.queryMyMaterialDetail(medMyMaterialDTO);
//        Long user_id = (Long) myMaterial.get("user_id");
//        Long self_user_id = httpRequestAspect.getUserId();
//        if (user_id != self_user_id) {
//            return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), "该资源非用户所有，不可操作");
//        }
//
//        return Result.success(myMaterial);
//    }
//
//    /**
//     * 加入我的素材 (从素材中心)
//     * @param medMyMaterialDTO
//     * @return
//     */
//    @PreAuthorize("@sr.hasPermission('21.1.2')")
//    @PostMapping("/api/med/material/addToMyMaterial")
//    public Result addToMyMaterial(@Validated(MedMyMaterialDTO.Create.class) @RequestBody MedMyMaterialDTO medMyMaterialDTO) {
//
//        // [查询] 自身 UserId
//        Long user_id = httpRequestAspect.getUserId();
//        medMyMaterialDTO.setUser_id(user_id);
//
//        // 查询素材详情
//        Long material_id = (Long) medMyMaterialDTO.getMaterial_id();
//        MedMaterialDTO medMaterialDTO = new MedMaterialDTO();
//        medMaterialDTO.setMaterial_id(material_id);
//        Map<String, Object> materialDetail = medMaterialMapper.queryMaterialDetail(medMaterialDTO);
//        if (materialDetail == null) {
//            return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), "素材不存在");
//        }
//
//        // 判断要加入的素材，必须是 (启用/审核通过) 的
//        // 素材状态 (-1禁用, 1启用)，审核状态 (-1审核拒绝, 1待审核, 2审核通过)
//        Integer status = (Integer) materialDetail.get("status");
//        Integer audit_status = (Integer) materialDetail.get("audit_status");
//        if (status != 1 || audit_status != 2) {
//            return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), "素材未公开或未审核通过");
//        }
//
//        return Result.success(medMyMaterialService.addToMyMaterial(medMyMaterialDTO, materialDetail), "创建成功");
//    }
//
//    /**
//     * 分享我的素材 (到素材列表)
//     * @param medMyMaterialDTO
//     * @return
//     */
//    @PreAuthorize("@sr.hasPermission('21.1.3')")
//    @PostMapping("/api/med/material/shareToMaterial")
//    public Result shareToMaterial(@Validated(MedMyMaterialDTO.Detail.class) @RequestBody MedMyMaterialDTO medMyMaterialDTO) {
//
//        // [查询] 自身 UserId
//        Long user_id = httpRequestAspect.getUserId();
//        medMyMaterialDTO.setUser_id(user_id);
//
//        // 查询素材详情
//        Map<String, Object> myMaterialDetail = medMyMaterialMapper.queryMyMaterialDetail(medMyMaterialDTO);
//        if (myMaterialDetail == null) {
//            return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), "素材不存在");
//        }
//
//        // // 判断要加入的素材，必须是 (启用/审核通过) 的
//        // // 素材状态 (-1禁用, 1启用)，审核状态 (-1审核拒绝, 1待审核, 2审核通过)
//        // Integer status = (Integer) materialDetail.get("status");
//        // Integer audit_status = (Integer) materialDetail.get("audit_status");
//        // if (status != 1 || audit_status != 2) {
//        //     return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), "素材未公开或未审核通过");
//        // }
//
//        return Result.success(medMyMaterialService.shareToMaterial(medMyMaterialDTO, myMaterialDetail), "创建成功");
//    }
//
//
//
//    /**
//     * [方法] 根据 素材类型 (material_type) 判断对应必填字段
//     * 当 material_type 为：
//     * - 4 时，content 不为空
//     * - 1,2,3 时，file 不为空
//     */
//    private Result checkMaterialContent(MedMyMaterialDTO medMyMaterialDTO) {
//        Integer material_type = medMyMaterialDTO.getMaterial_type();
//        if (material_type == 4) {
//            String content = medMyMaterialDTO.getContent();
//            if (content == null || content == "") return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), "(material_type:4) (content) 内容不能为空");
//        }
//        Set<Integer> materialTypes = new HashSet<>(Arrays.asList(1, 2, 3));
//        if (materialTypes.contains(material_type)) {
//            String file = medMyMaterialDTO.getFile();
//            if (file == null || file == "") return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), "(material_type:" + material_type + ") (file) 文件路径不能为空");
//        }
//        return null;
//    }
//
//    /**
//     * 创建我的素材 (用户)
//     * @param medMyMaterialDTO
//     * @return
//     */
//    @PreAuthorize("@sr.hasPermission('21.1.4')")
//    @PostMapping("/api/med/material/createMyMaterial")
//    public Result createMyMaterial(@Validated(MedMyMaterialDTO.Create.class) @RequestBody MedMyMaterialDTO medMyMaterialDTO) {
//
//        // 获得自身账号 user_id
//        Long self_user_id = httpRequestAspect.getUserId();
//        medMyMaterialDTO.setUser_id(self_user_id);
//
//        // [方法] 根据 素材类型 (material_type) 判断对应必填字段
//        Result valid = checkMaterialContent(medMyMaterialDTO);
//        if (valid != null) {
//            return valid;
//        }
//
//        return Result.success(medMyMaterialService.insertMyMaterial(medMyMaterialDTO), "创建成功");
//    }
//
//    @PreAuthorize("@sr.hasPermission('21.1.5')")
//    @PutMapping("/api/med/material/updateMyMaterial")
//    public Result updateMyMaterial(@Validated(MedMaterialDTO.Update.class) @RequestBody MedMyMaterialDTO medMyMaterialDTO) {
//
//        // [方法] 根据 素材类型 (material_type) 判断对应必填字段
//        Result valid = checkMaterialContent(medMyMaterialDTO);
//        if (valid != null) {
//            return valid;
//        }
//
//        return Result.success(medMyMaterialService.updateMyMaterial(medMyMaterialDTO), "更新成功");
//    }
//
//
//
//    @PreAuthorize("@sr.hasPermission('21.1.6')")
//    @DeleteMapping("/api/med/material/deleteMyMaterial")
//    public Result deleteMyMaterial(@Validated(MedMyMaterialDTO.Delete.class) @RequestBody MedMyMaterialDTO medMyMaterialDTO) {
//
//        Map<String, Object> myMaterial = medMyMaterialService.queryMyMaterialDetail(medMyMaterialDTO);
//
//        // 判断是否存在
//        if (myMaterial == null) {
//            return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), "资源不存在");
//        }
//
//        // 判断是否当前用户所有 (匹配 user_id)，不是则不可操作
//        Long user_id = (Long) myMaterial.get("user_id");
//        Long self_user_id = httpRequestAspect.getUserId();
//        if (user_id != self_user_id) {
//            return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), "该资源非用户所有，不可操作");
//        }
//
//        return Result.success(medMyMaterialService.deleteMyMaterial(medMyMaterialDTO), "删除成功");
//    }
//
//    @PreAuthorize("@sr.hasPermission('21.1.6')")
//    @DeleteMapping("/api/med/material/deleteMyMaterialBatch")
//    public Result deleteMyMaterialBatch(@Validated(MedMyMaterialDTO.Delete.class) @RequestBody MedMyMaterialDTO medMyMaterialDTO) {
//
//        List<Map<String, Object>> myMaterials = medMyMaterialMapper.queryMyMaterialList(medMyMaterialDTO);
//
//        // 判断是否存在
//        if (myMaterials.isEmpty()) {
//            return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), "资源不存在");
//        }
//
//        // 判断是否当前用户所有 (匹配 user_id)，不是则不可操作 (批量遍历)
//        Long self_user_id = httpRequestAspect.getUserId();
//        boolean isCurrentUserAll = true;
//        for (Map<String, Object> myMaterial : myMaterials) {
//            Long user_id = (Long) myMaterial.get("user_id");
//            if (!self_user_id.equals(user_id)) {
//                isCurrentUserAll = false;
//                break;
//            }
//        }
//
//        if (isCurrentUserAll) {
//            List<Long> my_material_ids = medMyMaterialDTO.getMy_material_ids();
//            return Result.success(medMyMaterialService.deleteMyMaterialBatch(my_material_ids), "删除成功");
//        } else {
//            return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), "该资源非用户所有，不可操作");
//        }
//    }
//
//}
