package com.usky.sas.controller.web;

import com.usky.common.core.bean.ApiResult;
import com.usky.common.core.bean.CommonPage;
import com.usky.sas.service.SasSystemService;
import com.usky.sas.service.vo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;

/**
 * 系统信息 / 版本 / 备份 接口
 * 对应 API 文档：系统信息界面接口文档.md
 */
@RestController
@RequestMapping("/system")
public class SasSystemController {

    @Autowired
    private SasSystemService sasSystemService;

    /**
     * 1.1 查询系统信息
     * 获取系统基本信息，包括厂商信息、客户端ID、系统版本号、授权模块、有效期等
     *
     * @return 系统信息
     */
    @GetMapping("/info")
    public ApiResult<SystemInfoResponse> getSystemInfo() {
        return ApiResult.success(sasSystemService.getSystemInfo());
    }

    /**
     * 2.1 查询系统版本信息
     * 获取当前系统版本信息，包括最后升级版本、升级时间、升级持续时间等
     *
     * @return 版本信息
     */
    @GetMapping("/version")
    public ApiResult<VersionInfoResponse> getVersionInfo() {
        return ApiResult.success(sasSystemService.getVersionInfo());
    }

    /**
     * 2.2 查询版本历史列表
     * 获取系统版本升级历史记录，倒序
     *
     * @param request 分页请求参数
     * @return 版本历史分页列表
     */
    @GetMapping("/versionHistory")
    public ApiResult<CommonPage<VersionHistoryItem>> getVersionHistory(VersionHistoryPageRequest request) {
        return ApiResult.success(sasSystemService.getVersionHistory(request));
    }

    /**
     * 3.1 创建备份
     * 创建系统数据备份，支持三种备份类型
     * 备份类型：1-备份配置数据，2-备份配置及事件数据，3-完全备份系统数据
     *
     * @param backupType 备份类型
     * @param response HTTP响应对象
     */
    @GetMapping("/backup")
    public void createBackup(@RequestParam("backupType") Integer backupType, HttpServletResponse response) {
        BackupRequest request = new BackupRequest();
        request.setBackupType(backupType);
        sasSystemService.createBackup(request, response);
    }

    /**
     * 3.2 恢复系统数据
     * 使用备份文件恢复系统数据
     *
     * @param request 恢复请求参数
     * @return 恢复结果
     */
    @PostMapping("/backupRestore")
    public ApiResult<BackupRestoreResponse> restoreSystemData(@RequestBody BackupRestoreRequest request) {
        return ApiResult.success(sasSystemService.restoreSystemData(request));
    }
}
