package cn.wisenergy.chnmuseum.party.web.controller;

import cn.wisenergy.chnmuseum.party.common.util.DateUtil;
import cn.wisenergy.chnmuseum.party.model.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import cn.wisenergy.chnmuseum.party.web.controller.base.BaseController;
import cn.wisenergy.chnmuseum.party.service.TBoardStatisticService;
import cn.wisenergy.chnmuseum.party.common.enums.AuditStatusEnum;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Add;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Update;
import cn.wisenergy.chnmuseum.party.common.vo.GenericPageParam;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <pre>
 * 展板统计信息表 前端控制器
 * </pre>
 *
 * @author Danny Lee
 * @since 2021-03-25
 */
@Slf4j
@RestController
@RequestMapping("/tBoardStatistic")
@Api(tags = {"展板统计信息表操作接口"})
public class TBoardStatisticController extends BaseController {

    @Resource
    private TBoardStatisticService tBoardStatisticService;

//    @ApiImplicitParams(value = {
//            @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
//            @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer")
//    })
    @PostMapping("/getBoardSurvey")
    @RequiresPermissions("t:board:statistic:survey")
    @ApiOperation(value = "获取展板统计概况", notes = "获取展板统计概况")
    public Map<String, Object> getBoardSurvey(TBoardSurvey survey) {

        TBoardSurvey result = this.tBoardStatisticService.getBoardSurvey(survey);

        return getResult(result);
    }

    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer")
    })
    @PostMapping("/getBoardRankPageList")
    @RequiresPermissions("t:board:statistic:rankPage")
    @ApiOperation(value = "获取展板播放排行", notes = "获取展板播放排行")
    public Map<String, Object> getBoardRankPageList(TBoardPlayRank rank) {

        Page<TBoardPlayRank> page = this.tBoardStatisticService.getBoardRankPageList(getPage(),rank);
        for (TBoardPlayRank tBoardStatistic : page.getRecords()) {

        }
        return getResult(page);
    }

    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer")
    })
    @PostMapping("/getBoardTrendPageList")
    @RequiresPermissions("t:board:statistic:trendPage")
    @ApiOperation(value = "获取展板播放趋势", notes = "获取展板播放趋势")
    public Map<String, Object> getBoardTrendPageList(TBoardPlayTrend trend) {
        // 如果查询日志为空,则默认当月
        if (StringUtils.isEmpty(trend.getPlayDate())){
            trend.setPlayDate(DateUtil.getCurrentDate("yyyyMM"));
        }

        Page<TBoardPlayTrend> page = this.tBoardStatisticService.getBoardTrendPageList(getPage(),trend);
        // 处理数据为展板趋势图
        Map map = new HashMap();
        List dateList = new ArrayList();
        List cntList = new ArrayList();
        for (TBoardPlayTrend t : page.getRecords()) {
            dateList.add(t.getPlayDate());
            cntList.add(t.getPlayNumber());
        }
        map.put("dateList",dateList);
        map.put("cntList",cntList);
        return getResult(map);
    }


    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer")
    })
    @PostMapping("/getBoardDistrictPageList")
    @RequiresPermissions("t:board:statistic:districtPage")
    @ApiOperation(value = "获取地区展板播统计", notes = "获取地区展板播统计")
    public Map<String, Object> getBoardDistrictPageList(TDistrictBoardStatistic district) {

        Page<TDistrictBoardStatistic> page = this.tBoardStatisticService.getBoardDistrictPageList(getPage(),district);
        for (TDistrictBoardStatistic tBoardStatistic : page.getRecords()) {

        }
        return getResult(page);
    }

    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "organId", value = "统计机构", paramType = "query", dataType = "String")
    })
    @PostMapping("/getBoardProvincePlayTotalList")
    @RequiresPermissions("t:board:statistic:provPlayList")
    @ApiOperation(value = "获取省级展板播放统计", notes = "获取省级展板播放统计")
    public Map<String, Object> getBoardProvincePlayTotalList(String organId) {

        List list = this.tBoardStatisticService.getBoardProvincePlayTotalList(organId);
        return getResult(list);
    }

    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "frequencyDate", value = "互动统计时间 年:yyyy 月:yyyyMM,默认当月", paramType = "query", dataType = "String")
    })
    @PostMapping("/getInteractionFrequencyPageList")
    @RequiresPermissions("t:board:statistic:districtPage")
    @ApiOperation(value = "获取互动频次统计信息", notes = "获取互动频次统计信息")
    public Map<String, Object> getInteractionFrequencyPageList(String frequencyDate) {
        if (StringUtils.isEmpty(frequencyDate)){
            frequencyDate = DateUtil.getCurrentDate("yyyyMM");
        }

        Page page = this.tBoardStatisticService.getInteractionFrequency(getPage(),frequencyDate);
        //
        Map map = new HashMap();
        List organList = new ArrayList<>();
        List cntList = new ArrayList();
        for (Object o : page.getRecords()){
            Map m = (HashMap) o;
            organList.add(m.get("organName"));
            cntList.add(m.get("frequencyCnt"));
        }
        map.put("organList",organList);
        map.put("cntList",cntList);
        map.put("page",page);
        return getResult(map);
    }
//
//    @PostMapping("/batchSave")
//		@RequiresPermissions("t:board:statistic:batch:save")
//		@ApiOperation(value = "批量添加展板统计信息表", notes = "批量添加展板统计信息表")
//    public Map<String, Object> batchSaveTBoardStatistic(@Validated(value = {Add.class}) List<TBoardStatistic> tBoardStatisticList) {
//        // 保存业务节点信息
//        boolean result = tBoardStatisticService.saveBatch(tBoardStatisticList);
//        // 返回操作结果
//        if (result) {
//            return getSuccessResult();
//        } else {
//            // 保存失败
//            return getFailResult();
//        }
//    }
//
//
//
//
//    @PostMapping("/save")
//		@RequiresPermissions("t:board:statistic:save")
//		@ApiOperation(value = "添加展板统计信息表", notes = "添加展板统计信息表")
//	public Map<String, Object> saveTBoardStatistic(@Validated(value = {Add.class}) TBoardStatistic tBoardStatistic) {
//        // 获取当前日期
//        tBoardStatistic.setPlayDate(DateUtil.getCurrentDate("yyyyMMdd"));
//
//        // 保存业务节点信息
//        boolean result = tBoardStatisticService.save(tBoardStatistic);
//        // 返回操作结果
//        if (result) {
//            return getSuccessResult();
//        } else {
//            // 保存失败
//            return getFailResult();
//        }
//    }
//
//    @PutMapping("/update")
//		@RequiresPermissions("t:board:statistic:update")
//	    @ApiOperation(value = "修改展板统计信息表信息", notes = "修改展板统计信息表信息")
//    public Map<String, Object> updateTBoardStatistic(@Validated(value = {Update.class}) TBoardStatistic tBoardStatistic) {
//            boolean flag = tBoardStatisticService.updateById(tBoardStatistic);
//            if (flag) {
//            return getSuccessResult();
//        }
//        return getFailResult();
//    }
//
//	@PutMapping("/updateAuditStatus/{id}")
//	@RequiresPermissions("t:board:statistic:update:audit:status")
//	@ApiOperation(value = "更新展板统计信息表审核状态", notes = "更新展板统计信息表审核状态")
//	@ApiImplicitParams(value = {
//			@ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path"),
//			@ApiImplicitParam(name = "status", value = "状态", paramType = "query", dataType = "String")
//	})
//	public Map<String, Object> updateStatus(@NotNull(message = "展板统计信息表ID不能为空") @PathVariable("id") String id, @RequestParam("status") AuditStatusEnum status) {
//		UpdateWrapper<TBoardStatistic> updateWrapper = new UpdateWrapper<>();
//		updateWrapper.eq("id", id);
//		updateWrapper.eq("audit_status", status.name());
//		boolean flag = tBoardStatisticService.update(updateWrapper);
//		if (flag) {
//		return getSuccessResult();
//		}
//		return getFailResult();
//    }
//
//    @DeleteMapping("/delete/{id}")
//		@RequiresPermissions("t:board:statistic:delete")
//		@ApiOperation(value = "根据ID删除展板统计信息表", notes = "根据ID删除展板统计信息表")
//	@ApiImplicitParams(value = {
//			@ApiImplicitParam(name = "id", value = "标识ID", paramType = "path", dataType = "String")
//	})
//    public Map<String, Object> deleteTBoardStatistic(@PathVariable("id") String id) {
//        boolean result = tBoardStatisticService.removeById(id);
//        if (result) {
//            return getSuccessResult();
//        }
//        return getFailResult();
//    }
//
//    @GetMapping("/getList")
//		@RequiresPermissions("t:board:statistic:list")
//		@ApiOperation(value = "获取展板统计信息表全部列表(无分页)", notes = "获取展板统计信息表全部列表(无分页)")
//	@ApiImplicitParams(value = {
//			@ApiImplicitParam(name = "auditStatus", value = "审核状态", paramType = "query", dataType = "String")
//	})
//    public Map<String, Object> getTBoardStatisticList(@RequestParam(value = "auditStatus", defaultValue = "APPROVED_FINAL", required = false) TBoardStatistic auditStatus) {
//        List<TBoardStatistic> tBoardStatisticList = tBoardStatisticService.list();
//        return getResult(tBoardStatisticList);
//    }
//
//	@ApiImplicitParams(value = {
//			@ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
//			@ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer"),
//			@ApiImplicitParam(name = "nameOrCode", value = "名称或编码", paramType = "query", dataType = "String"),
//			@ApiImplicitParam(name = "startDate", value = "创建时间-开始", paramType = "query", dataType = "String"),
//			@ApiImplicitParam(name = "endDate", value = "创建时间-结束", paramType = "query", dataType = "String")
//	})
//    @PostMapping("/getPageList")
//		@RequiresPermissions("t:board:statistic:page")
//		@ApiOperation(value = "获取展板统计信息表分页列表", notes = "获取展板统计信息表分页列表")
//    public Map<String, Object> getTBoardStatisticPageList(GenericPageParam genericPageParam) {
//		LambdaQueryWrapper<TBoardStatistic> queryWrapper = new LambdaQueryWrapper<>();
////		// 对名称或编码模糊查询
////		if (StringUtils.isNotBlank(genericPageParam.getNameOrCode())) {
////			queryWrapper.like(TBoardStatistic::getName, genericPageParam.getNameOrCode());
////		}
////		// 根据创建时间区间检索
////		if (genericPageParam.getStartDate() != null && genericPageParam.getEndDate() != null) {
////			queryWrapper.ge(TBoardStatistic::getCreateTime, genericPageParam.getStartDate().atTime(0, 0, 0))
////				.le(TBoardStatistic::getCreateTime, genericPageParam.getEndDate().atTime(23, 59, 59));
////		}
////		// 设置排序规则
////		queryWrapper.orderByDesc(TBoardStatistic::getCreateTime);
////		// 设置查询内容
////		queryWrapper.select(
////				TBoardStatistic::getId,
////				TBoardStatistic::getName,
////				TBoardStatistic::getAuditStatus,
////				TBoardStatistic::getCreateTime,
////				TBoardStatistic::getUpdateTime);
//		Page<TBoardStatistic> page = this.tBoardStatisticService.page(getPage(), queryWrapper);
//		for (TBoardStatistic tBoardStatistic : page.getRecords()) {
//
//		}
//		return getResult(page);
//    }
//
//    @ApiOperation(value = "获取展板统计信息表详情", notes = "获取展板统计信息表详情")
//    @ApiImplicitParams({
//            @ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path")
//    })
//    @GetMapping("/get/{id}")
//		@RequiresPermissions("t:board:statistic:get:id")
//	    public Map<String, Object> getById(@PathVariable("id") String id) {
//        TBoardStatistic tBoardStatistic = tBoardStatisticService.getById(id);
//		return getResult(tBoardStatistic);
//    }

}