package com.yfd.platform.system.controller;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.annotation.Log;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.system.domain.SysLog;
import com.yfd.platform.system.service.ISysLogService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 系统操作日志 前端控制器
 * </p>
 *
 *
 * @since 2023-03-08
 */
@RestController
@RequestMapping("/system/log")
@Api(tags = "系统日志")
public class SysLogController {

    @Resource
    private ISysLogService sysLogService;

    /**********************************
     * 用途说明: 分页查询日志信息
     * 参数说明  page分页对象、username（用户名）、(optType)
     * 操作类型、startDate(开始日期)、endDate（结束日期）
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回分页查询结果
     ***********************************/
    @PostMapping("/getLogList")
    @ApiOperation("分页查询日志信息")
    public ResponseResult getLogList(String username, String optType, String requestip, String module,String type,
                                     String startDate, String endDate, String orderfield, Page<SysLog> page) {

        Page<SysLog> sysLogPage = sysLogService.getLogList(username, optType, requestip, module,type,
                startDate, endDate, orderfield, page);
        Map<String, Object> map = new HashMap<>();
        List<SysLog> records = sysLogPage.getRecords();
        records.forEach(r -> {
            String params = r.getParams();
            if (JSONUtil.isTypeJSONObject(params)) {
                JSONObject jsonObject = JSONUtil.parseObj(params);
                jsonObject.remove("phone");
                jsonObject.remove("contactPhone");
                r.setParams(jsonObject.toString());
            }
        });
        map.put("list", records);
        map.put("total", sysLogPage.getTotal());
        map.put("size", sysLogPage.getSize());
        map.put("current", sysLogPage.getCurrent());
        return ResponseResult.successData(map);
    }

    /**********************************
     * 用途说明: 导出日志数据
     * 参数说明  sysLogs  所需导出的字典项集合
     * 返回值说明: com.yfd.platform.config.ResponseResult 返回导出成功或者失败
     ***********************************/
    @Log(module = "系统日志", value = "导出系统日志数",type = "0")
    @GetMapping("/exportExcel")
    @ApiOperation("导出日志数据")
    public void exportExcel(String username, String optType, String requestip, String module,String type,
                            String startDate,
                            String endDate, String orderfield, Page<SysLog> page,
                            HttpServletResponse response) throws IOException {
        sysLogService.exportExcel(username, optType, requestip, module,type,
                startDate, endDate, orderfield, response);
    }

    /**********************************
     * 用途说明: 删除6月前数据
     * 参数说明 无
     * 返回值说明:
     ***********************************/
    @Log(module = "系统日志", value = "删除6月前数据",type = "0")
    @GetMapping("/deleteLogs")
    @ApiOperation("删除6月前数据")
    public ResponseResult deleteLogs() {
        sysLogService.deleteLogs();
        return ResponseResult.success();
    }
}
