package com.yfd.platform.system.controller;


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.SysDataBackup;
import com.yfd.platform.system.domain.SysLog;
import com.yfd.platform.system.service.ISysDataBackupService;
import com.yfd.platform.system.service.ISysDictionaryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * 系统数据备份恢复记录 前端控制器
 * </p>
 *
 *
 * @since 2023-08-31
 */
@RestController
@RequestMapping("/system/databackup")
@Api(tags = "数据备份恢复")
public class SysDataBackupController {

    @Resource
    private ISysDataBackupService dataBackupService;

    /**********************************
     * 用途说明: 备份数据库表
     * 参数说明 datascope 类型 全部数据 基础数据 业务数据
     * 返回值说明: boolean 是否成功
     ***********************************/
    @PostMapping("/backupDataTable")
    @ApiOperation("备份数据表")
    public ResponseResult backupDataTable(String datascope) {
        boolean ok = dataBackupService.backupDataTable(datascope, "手工备份");
        if (ok) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }

    /**********************************
     * 用途说明: 备份数据库表
     * 参数说明 id 数据表备份文件记录id
     * 返回值说明: boolean 是否成功
     ***********************************/
    @PostMapping("/recoverDataTable")
    @ApiOperation("恢复数据表")
    public ResponseResult recoverDataTable(String id) {
        boolean ok = dataBackupService.recoverDataTable(id);
        if (ok) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }

    /**********************************
     * 用途说明: 分页查询日志信息
     * 参数说明  page分页对象、datascope（数据范围）、backuptype(backuptype)
     * 操作类型、startDate(开始日期)、endDate（结束日期）
     * 返回值说明:返回分页查询结果
     ***********************************/
    @GetMapping("/getBackFileList")
    @ApiOperation("分页查询备份文件信息")
    public ResponseResult getBackFileList(String filename, String datascope, String backuptype, String startDate,
                                          String endDate, Page<SysDataBackup> page) {

        Page<SysDataBackup> sysDataBackupPage = dataBackupService.getBackFileList(filename, datascope, backuptype,
                startDate, endDate, page);
        Map<String, Object> map = new HashMap<>();
        map.put("list", sysDataBackupPage.getRecords());
        map.put("total", sysDataBackupPage.getTotal());
        map.put("size", sysDataBackupPage.getSize());
        map.put("current", sysDataBackupPage.getCurrent());
        return ResponseResult.successData(map);
    }

    /**********************************
     * 用途说明: 下载数据库文件
     * 参数说明 id 数据表备份文件记录id
     * 返回值说明: boolean 是否成功
     ***********************************/
    @PostMapping("/downloadDataTable")
    @ApiOperation("下载数据库文件")
    public ResponseResult downloadDataTable(String id, HttpServletResponse response) {
        boolean ok = dataBackupService.downloadDataTable(id, response);
        if (ok) {
            return ResponseResult.success();
        } else {
            return ResponseResult.error();
        }
    }


}
