package com.ruoyi.web.controller.backstage;


import com.github.pagehelper.PageInfo;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.SysUserNotification;
import com.ruoyi.system.domain.UserWork;
import com.ruoyi.system.domain.WorkReview;
import com.ruoyi.system.domain.dto.ReviewWorkDto;
import com.ruoyi.system.domain.dto.SeOnlineTimeDto;
import com.ruoyi.system.domain.dto.SeUserWorkCountDto;
import com.ruoyi.system.domain.dto.UserWorkReviewDto;
import com.ruoyi.system.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

//import static com.ruoyi.common.core.domain.AjaxResult.error;
//import static com.ruoyi.common.utils.PageUtils.startPage;


// 内容审核后台管理
@RestController
@RequestMapping("/system/work")
public class SysWorkReviewController extends BaseController {

    @Autowired
    private IUserWorkService userWorkService;

    // 系统每天统计数据
    @Autowired
    private IDailySysService dailySysService;

    // 作品审核相关
    @Autowired
    private IWorkReviewService workReviewService;

    // 系统消息相关
    @Autowired
    private ISysUserNotificationService sysUserNotificationService;


    /*
  * 获取过审总数--workStatus=3
    获取未审总数--workStatus=2
  * */
    //未申总数
    //过审总数
    //退回总数 workStatus=5
    //所有总数  workStatus=null

    // 获取所有作品数量统计数据
    @GetMapping("/getStWorkCount")
    public AjaxResult getStWorkCount(){
        //作品总数
        Long tCount = userWorkService.getUserWorkCount(null);

        //过审总数
        Long passCount = userWorkService.getUserWorkCount("3");

        // 未审总数
        Long waitCount = userWorkService.getUserWorkCount("2");

        // 退回总数
        Long unPassCount = userWorkService.getUserWorkCount("5");

        AjaxResult ajax = AjaxResult.success();
        ajax.put("tCount", tCount);
        ajax.put("passCount", passCount);
        ajax.put("waitCount", waitCount);
        ajax.put("unPassCount", unPassCount);

        return ajax;
    }

//    //----------------------------------------------------废弃---------------------------------------------------------
//    @GetMapping("/getAllWorkCount")
//    public AjaxResult getAllWorkCount(){
//        Long count = userWorkService.getUserWorkCount(null);
//
//        return success(count);
//    }
//
//    @GetMapping("/getAllWorkCount/{workStatus}")
//    public AjaxResult getWorkCount(@PathVariable String workStatus){
//        System.out.println("作品状态: "+ workStatus);
//        Long count = userWorkService.getUserWorkCount(workStatus);
//
//        return success(count);
//    }
//    //----------------------------------------------------废弃结束----------------------------------------------------------




    //获取指定天数的用户作品总量
    @Log(title = "内容审核--获取指定天数的用户作品总量", businessType = BusinessType.GET)
    @GetMapping("/getDayWorkCount/{day}")
    public AjaxResult getDayWorkCount(@PathVariable int day){
        LocalDate now = LocalDate.now();
        LocalDate startDate = now.minusDays(day+1);
        LocalDate endDate = now.minusDays(1);

//        // 实际要返回的方法
//        List<SeUserWorkCountDto> seUserWorkCount = dailySysService.getSeUserWorkCount(startDate, endDate);

        //-----------------------测试保证返回数组的长度为day-----------------------
        List<SeUserWorkCountDto> seUserWorkCount = new ArrayList<>();
        for(int i=0;i<day;i++){
            SeUserWorkCountDto seUserWorkCountDto = new SeUserWorkCountDto();
            seUserWorkCountDto.setDate(startDate.plusDays(i+1));

            Random random = new Random();
            long minValue = 1000L;
            long maxValue = 99999999L;
            long range = maxValue - minValue + 1;
            long randomLong = minValue + (long) (random.nextDouble() * range);

            seUserWorkCountDto.settWork(randomLong);
            seUserWorkCount.add(seUserWorkCountDto);
        }

        //-------------------------测试end---------------------------------------
        return AjaxResult.success(seUserWorkCount);
    }



    //获取所有作品列表-----作品图片 名称 内容 创建时间 作者 资源位 审核状态  审核记录
    // 后续要加搜索功能------没添加搜索功能
    @Log(title = "内容审核--获取作品列表", businessType = BusinessType.GET)
    @GetMapping("/getAllUserWork")
    public TableDataInfo getAllUserWork(UserWork userWork){

        startPage();
        List<UserWorkReviewDto> userWorkList = userWorkService.getAllUserWork(userWork);
        for(UserWorkReviewDto userWorkReviewDto:userWorkList){
            userWorkReviewDto.setSource(userWorkReviewDto.getCity()+userWorkReviewDto.getScenic()+userWorkReviewDto.getPart());
        }
        return getDataTable(userWorkList);

    }

    // 根据作品id获取作品详情
    @Log(title = "内容审核--查看审核详情", businessType = BusinessType.GET)
    @GetMapping("/getUserWork/{workId}")
    public AjaxResult getUserWork(@PathVariable Long workId){
        UserWork userWork = userWorkService.selectUserWorkByWorkId(workId);

        List<UserWorkReviewDto> userWorkList = userWorkService.getAllUserWork(userWork);

        // 获取作品详细信息
        UserWorkReviewDto userWorkReviewDto = userWorkList.get(0);
        userWorkReviewDto.setSource(userWorkReviewDto.getCity()+userWorkReviewDto.getScenic()+userWorkReviewDto.getPart());


        // 返回具体的评审意见
        WorkReview workReview = new WorkReview();
        workReview.setWorkId(workId);
        // 只查未删除的评论, 删除评论为1
        workReview.setDeleteFlag("0");
        List<WorkReview> workReviewList = workReviewService.selectWorkReviewList(workReview);

        AjaxResult ajax = AjaxResult.success();
        ajax.put("workReviewList", workReviewList);

//        //-------------------------- old-------------------------------------------------
//        ajax.put("userWork", userWork);
//        //-----------------------------------old end---------------------------------------

        ajax.put("userWork", userWorkReviewDto);


        return ajax;
    }

    // 审核作品
    // 待更新退款相关逻辑!!
    // 默认没有第4个人审核---------如果有的话需要修改相关逻辑
    // 审核完成后---------发送消息通知
    // 20241212---------审核以最后一个人的审核标准为准.----------------
    @Log(title = "内容审核--审核作品", businessType = BusinessType.UPDATE)
    @Transactional
    @PostMapping("/reviewWork")
    public AjaxResult reviewWork(@RequestBody ReviewWorkDto reviewWorkDto){

        // 作品id
        Long workId = reviewWorkDto.getWorkId();
        // 作品状态
        String workStatus = reviewWorkDto.getWorkStatus();
        // 审核意见
        String auditOpinion = reviewWorkDto.getAuditOpinion();

        System.out.println("作品id: "+ workId + " 审核状态: "+ workStatus + " 审核意见: "+ auditOpinion);

        // 用户id 也就是审核人id
        Long userId = getUserId();

        // 用户昵称

        SysUser user = getLoginUser().getUser();

        //
        String nickName = user.getNickName();

        //-----------------------------新建审核意见, 插入审核意见----------------------------------------------
        WorkReview workReview = new WorkReview();

        workReview.setWorkId(workId);
        workReview.setReviewerId(userId);
        workReview.setWorkStatus(workStatus);
        workReview.setDetail(auditOpinion);
        workReview.setReviewerName(nickName);
//        workReview.setWorkStatus(workStatus);

        int back = workReviewService.insertWorkReview(workReview);
        if(back==0){
            return error("插入审核意见失败");
        }
        //------------------------------新建审核意见结束------------------------------------





        //-----------------------------新版审核逻辑-能无数个人审-以最后一个人审的为准---------------------
        UserWork userWork = userWorkService.selectUserWorkByWorkId(workId);

        // 审核不通过
        if(workStatus.equals("4")){
            //退款逻辑--------判断时间-----退款----下架.



            //消息提醒-------------
        }


        //------------------------------新建系统消息----------------------------------------
        SysUserNotification sysUserNotification = new SysUserNotification();

        String msg = "";
        // 审核通过
        if(workStatus.equals("3")){
            sysUserNotification.setType("3");
            msg = "作品<<" + userWork.getWorkName() + ">>审核通过";


        }
        // 审核不通过
        else if(workStatus.equals("4")){
            sysUserNotification.setType("4");
            msg = "作品<<" + userWork.getWorkName() + ">>审核不通过";
        }
        else{
            return error("请选择审核状态");
        }
        sysUserNotification.setDetail(msg);
        sysUserNotification.setTargetId(workId);

        // 接收者id
        sysUserNotification.setUserId(userWork.getUserId());

        // 发送者id
        sysUserNotification.setSenderId(userId);

        sysUserNotification.setStatus("0");

        sysUserNotificationService.insertSysUserNotification(sysUserNotification);

        //-----------------------------新建系统消息end---------------------------------------



        userWork.setWorkStatus(workStatus);

        userWork.setAuditOpinion(userWork.getAuditOpinion()+auditOpinion);

        //更新作品数据库
        int backUpdate = userWorkService.updateUserWork(userWork);
        if(backUpdate==0){
            return error("更新作品状态失败");
        }


        return success("作品审核完成");



        //--------------------------------新版审核逻辑结束--------------------------------------



//        //----------------------------------旧版作品审核---以多人的意见为准---------------
//        // 这里默认一定能查到, 不然怎么审核这个作品
//        UserWork userWork = userWorkService.selectUserWorkByWorkId(workId);
//
//
//
//        //-----------------------------修改作品状态-----------------------------------------
//        // 要判断这是第几个审核人了, 若是第三个人就要参考作品状态来决定是否通过
//        // 查看当前作品审核人总数
//        List<WorkReview> workReviewList = workReviewService.selectWorkReviewList(workReview);
//
//        if (workReviewList.size()==3){
//            // 如果size=3,则以第三个人的判断为准
//
//            // 第三个人审核通过
//            if (workStatus.equals("3")){
//
//
//                // 设置作品状态为审核通过
//                userWork.setWorkStatus("3");
//                // 设置评审意见
//                userWork.setAuditOpinion(userWork.getAuditOpinion()+auditOpinion);
//
//                // 更新作品数据库
//                int backUpdate = userWorkService.updateUserWork(userWork);
//                if(backUpdate==0){
//                    return error("更新作品状态失败");
//                }
//
//
//                return success("作品审核完成");
//
//
//            }else if (workStatus.equals("4")){  // 第三个人审核不通过---可能触发退款
//                // 设置作品状态为审核不通过
//                userWork.setWorkStatus("4");
//                // 设置评审意见
//                userWork.setAuditOpinion(userWork.getAuditOpinion()+auditOpinion);
//
//                //-------------------------退款检测-----------------------------------------
//
//                //-------------------------退款检测-----------------------------------------
//
//                // 更新作品数据库
//                int backUpdate = userWorkService.updateUserWork(userWork);
//                if(backUpdate==0){
//                    return error("更新作品状态失败");
//                }
//
//                return success("作品审核完成");
//            }
//
//
//        }
//        // 两个人的判断一致时,修改状态.
//        else if(workReviewList.size()==2){
//            if (workReviewList.get(0).getWorkStatus().equals(workReviewList.get(1).getWorkStatus())){
//                // 两个人判断一致
//
//
//                // 审核不通过
//                if(workReviewList.get(0).getWorkStatus().equals("4")){
//                    userWork.setWorkStatus("5");
//
//                    // 退款逻辑
//                }
//                else{
//                    // 设置作品状态为两人相同的状态, 两人都通过
//                    userWork.setWorkStatus("3");
//                }
//
//                // 设置评审意见
//                userWork.setAuditOpinion(userWork.getAuditOpinion()+","+nickName+"审核: "+auditOpinion);
//
//                // 更新作品数据库
//                int backUpdate = userWorkService.updateUserWork(userWork);
//                if(backUpdate==0){
//                    return error("更新作品状态失败");
//                }
//
//
//
//                return success("作品审核完成");
//
//            }
//            // 两人意见不同, 就不更新待审核状态, 只保存意见
//            else{
//                // 设置评审意见--------只更新评审意见就行
//                userWork.setAuditOpinion(userWork.getAuditOpinion()+nickName+"审核: "+auditOpinion);
//                // 更新作品数据库
//                int backUpdate = userWorkService.updateUserWork(userWork);
//                if(backUpdate==0){
//                    return error("更新作品状态失败");
//                }
//
//                return success("作品审核完成");
//            }
//        }
//
//        else{ // 第一个人评论
//            // 设置评审意见--------只更新评审意见就行
//            userWork.setAuditOpinion(userWork.getAuditOpinion()+nickName+"审核: "+auditOpinion);
//            // 更新作品数据库
//            int backUpdate = userWorkService.updateUserWork(userWork);
//            if(backUpdate==0){
//                return error("更新作品状态失败");
//            }
//
//            return success("作品审核完成");
//        }
//
//        return success("作品审核完成");
//
//        //--------------------旧版审核------------------------------------------------------------------




        //-----------------------------修改作品状态结束-------------------------------------




    }

    // 查看作品详情






}
