package com.fs.stats;

import com.fs.common.annotation.RateLimiter;
import com.fs.common.core.domain.AjaxResult;
import com.fs.common.core.domain.R;
import com.fs.common.utils.StringUtils;
import com.fs.common.utils.poi.ExcelUtil;
import com.fs.company.cache.ICompanyUserCacheService;
import com.fs.company.service.ICompanyService;
import com.fs.company.vo.DeptDataVO;
import com.fs.sop.params.GetSOPTaskDataParam;
import com.fs.sop.service.IQwSopLogsService;
import com.fs.sop.service.IQwSopService;
import com.fs.sop.vo.QwSopTask;
import com.fs.statis.IFsStatisQwWatchService;
import com.fs.statis.domain.FsStatisEveryDayWatch;
import com.fs.statis.domain.FsStatisQwWatch;
import com.fs.statis.domain.FsStatisSalerWatch;
import com.fs.statis.domain.FsStatisSopWatch;
import com.fs.statis.dto.StatsWatchLogPageListDTO;
import com.fs.statis.service.FsStatisSalerWatchService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

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

/**
 * 看课统计接口
 */
@RestController
@RequestMapping("/stats")
@AllArgsConstructor
public class SalesWatchStatisController {

    @Autowired
    private FsStatisSalerWatchService fsStatisSalerWatchService;

    @Autowired
    private IQwSopService qwSopService;

    @Autowired
    private ICompanyService companyService;

    @Autowired
    private ICompanyUserCacheService companyUserCacheService;

    @Autowired
    private IFsStatisQwWatchService fsStatisQwWatchService;

    @Autowired
    private IQwSopLogsService qwSopLogsService;

    @GetMapping("/computedData")
    public R computedData(@RequestParam("date") String date){
        fsStatisSalerWatchService.writeData(date);
        return R.ok();
    }
    /**
     * 销售完播统计查询
     * @param param param
     * @return R
     */
    @PostMapping("/seller/pageList")
    public R sellerQueryList(@RequestBody StatsWatchLogPageListDTO param){
        if(param.getPageNum() == null) {
            param.setPageNum(1);
        }
        if(param.getPageSize() == null) {
            param.setPageSize(10);
        }
        PageHelper.startPage(param.getPageNum(), param.getPageSize());

        List<FsStatisSalerWatch> list = fsStatisSalerWatchService.queryList(param);
        return R.ok().put("data",new PageInfo<>(list));
    }

    /**
     * 进线转化统计
     * @param param 参数
     * @return R
     */
    @PostMapping("/inline/pageList")
    public R inlineTransferStats(@RequestBody StatsWatchLogPageListDTO param){
        if(param.getPageNum() == null) {
            param.setPageNum(1);
        }
        if(param.getPageSize() == null) {
            param.setPageSize(10);
        }
        PageHelper.startPage(param.getPageNum(), param.getPageSize());

        List<FsStatisQwWatch> list = fsStatisQwWatchService.queryList(param);
        return R.ok().put("data",new PageInfo<>(list));
    }
    @PostMapping("/inline/export")
    @RateLimiter(time=5,count = 1)
    public AjaxResult exportInlineQueryList(@RequestBody StatsWatchLogPageListDTO param){
        param.setPageNum(null);
        param.setPageSize(null);
        List<FsStatisQwWatch> list = fsStatisQwWatchService.exportQueryList(param);
        ExcelUtil<FsStatisQwWatch> util = new ExcelUtil<>(FsStatisQwWatch.class);
        return util.exportExcel(list, "销售完播统计");
    }


    @PostMapping("/seller/export")
    @RateLimiter(time=5,count = 1)
    public AjaxResult exportSellerQueryList(@RequestBody StatsWatchLogPageListDTO param){
        param.setPageNum(null);
        param.setPageSize(null);
        List<FsStatisSalerWatch> list = fsStatisSalerWatchService.export(param);
        ExcelUtil<FsStatisSalerWatch> util = new ExcelUtil<>(FsStatisSalerWatch.class);
        return util.exportExcel(list, "销售完播统计");
    }

    /**
     * 训练营完播统计查询
     * @param param param
     * @return R
     */
    @PostMapping("/period/pageList")
    public R periodQueryList(@RequestBody StatsWatchLogPageListDTO param){
        if(param.getPageNum() == null) {
            param.setPageNum(1);
        }
        if(param.getPageSize() == null) {
            param.setPageSize(10);
        }
        PageHelper.startPage(param.getPageNum(), param.getPageSize());

        List<FsStatisSalerWatch> list = fsStatisSalerWatchService.queryPeriodList(param);
        return R.ok().put("data", new PageInfo<>(list));
    }

    @PostMapping("/period/export")
    @RateLimiter(time=5,count = 1)
    public AjaxResult exportPeriodQueryList(@RequestBody StatsWatchLogPageListDTO param){
        param.setPageNum(null);
        param.setPageSize(null);
        List<FsStatisSopWatch> list = fsStatisSalerWatchService.exportQueryPeriodList(param);
        ExcelUtil<FsStatisSopWatch> util = new ExcelUtil<>(FsStatisSopWatch.class);
        return util.exportExcel(list, "SOP任务完播统计");
    }

    /**
     * 每日完播统计查询
     * @param param param
     * @return R
     */
    @PostMapping("/everyDay/pageList")
    public R everyDayQueryList(@RequestBody StatsWatchLogPageListDTO param){
        if(param.getPageNum() == null) {
            param.setPageNum(1);
        }
        if(param.getPageSize() == null) {
            param.setPageSize(10);
        }
        PageHelper.startPage(param.getPageNum(), param.getPageSize());
        List<FsStatisSalerWatch> list = fsStatisSalerWatchService.queryTodayList(param);
        return R.ok().put("data", new PageInfo<>(list));
    }
    @PostMapping("/everyDay/export")
    @RateLimiter(time=5,count = 1)
    public AjaxResult exportEveryDayQueryList(@RequestBody StatsWatchLogPageListDTO param){
        param.setPageNum(null);
        param.setPageSize(null);
        List<FsStatisEveryDayWatch> list = fsStatisSalerWatchService.exportQueryEveryDayList(param);
        ExcelUtil<FsStatisEveryDayWatch> util = new ExcelUtil<>(FsStatisEveryDayWatch.class);
        return util.exportExcel(list, "每日完播统计");
    }
    /**
     * 获取SOP任务数据
     * @return
     */
    @PostMapping("/sopTaskData")
    public R getSOPTaskData(@RequestBody GetSOPTaskDataParam param){
        if(StringUtils.isBlank(param.getStartDate()) && StringUtils.isBlank(param.getEndDate())) {
            param.setStartDate(LocalDate.now().minusDays(7).toString());
            param.setEndDate(LocalDate.now().toString());
        }
        List<QwSopTask> qwSopTaskList = qwSopService.getQwSopTaskList(param);
        return R.ok().put("data",qwSopTaskList);
    }

    /**
     * 获取部门数据
     * @return
     */
    @GetMapping("/getDeptData")
    public R getDeptData(Long companyId){
        List<DeptDataVO> data = companyUserCacheService.getDeptData(companyId);
        return R.ok().put("data",data);
    }

}
