package com.mini.capi.sys.Api;

import com.mini.capi.model.ApiResult;
import com.mini.capi.model.TabResult;
import com.mini.capi.sys.service.DbService;
import com.mini.capi.sys.service.DockerService;
import com.mini.capi.sys.service.HostService;
import com.mini.capi.utils.vToken;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/Sys/api")
public class apiController {


    @Resource
    private DbService dbService;

    @Resource
    private HostService hostService;


    @Resource
    private DockerService dockerService;


    /**
     * 获取MySQL的当前连接下的所有数据表
     */
    @GetMapping("/getApiSourceTables")
    public ApiResult<List<TabResult>> listSourceTables(String token, String dbId) {
        // 1. 验证token有效性
        if (vToken.isValidToken(token)) {
            return ApiResult.error(401, "无效的访问令牌");
        }
        return dbService.listSourceTables(dbId);
    }


    @GetMapping("/getApiInfo")
    public ApiResult<List<HostService.SnapshotDTO>> getApiInfo(String token) {
        if (vToken.isValidToken(token)) {
            return ApiResult.error(401, "无效的访问令牌");
        }
        return hostService.getApiInfo();
    }


    /**
     * 获取容器列表
     */
    @GetMapping("/getApiDockerInfo")
    public ApiResult<?> getDockerInfo(String token) {
        if (vToken.isValidToken(token)) {
            return ApiResult.error(401, "无效的访问令牌");
        }
        return hostService.getDockerInfo();
    }


    /**
     * 启动容器
     */
    @GetMapping("/getApiStartDockerInfo")
    public ApiResult<?> startDockerInfo(String id, String token) {
        if (vToken.isValidToken(token)) {
            return ApiResult.error(401, "无效的访问令牌");
        }
        return hostService.startDockerInfo(id);
    }


    /**
     * 停止容器
     */
    @GetMapping("/getApiStopDockerInfo")
    public ApiResult<?> stopDockerInfo(String id, String token) {
        if (vToken.isValidToken(token)) {
            return ApiResult.error(401, "无效的访问令牌");
        }
        return hostService.stopDockerInfo(id);
    }


    /**
     * 获取容器主机的磁盘使用情况
     */
    @GetMapping("/getTaskDockerDiskInfo")
    public ApiResult<?> jobHostDisk(String token) {
        if (vToken.isValidToken(token)) {
            return ApiResult.error(401, "无效的访问令牌");
        }
        return dockerService.jobHostDisk();
    }


    /**
     * 运行全部任务数据同步
     */
    @GetMapping("/getTaskSyncDbInfo")
    public ApiResult<?> jobSyncAllTask(String token) {
        if (vToken.isValidToken(token)) {
            return ApiResult.error(401, "无效的访问令牌");
        }
        return dbService.jobSyncAllTask();
    }

    /**
     * 运行单个任务
     */
    @GetMapping("/getTaskSyncDbByInfo")
    public ApiResult<?> jobSyncOneTask(String token, String taskId) {
        if (vToken.isValidToken(token)) {
            return ApiResult.error(401, "无效的访问令牌");
        }
        return dbService.jobSyncOneTask(taskId);
    }

}
