package cd.casic.module.execute.docker.service;

import cd.casic.module.execute.docker.dataobject.model.RunNewContainer;
import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.command.InspectContainerResponse;
import com.github.dockerjava.api.command.TopContainerResponse;
import com.github.dockerjava.api.model.Container;

import java.util.List;

/**
 * @description: 容器服务接口
 * @author: mianbin
 * @date: 2025/5/26 14:27
 * @version: 1.0
 */
public interface IContainerService {
    /**
     * 查询容器列表，这个接口注意一下，showall参数 true 代表的是命令docker ps -a , false代表的是docker ps
     *
     * @param showAll
     */
    List<Container> list(String clientId, boolean showAll);

    /**
     * 运行新的容器
     *
     * @return
     */
    CreateContainerResponse run(String clientId, RunNewContainer runNewContainer);

    /**
     * 启动一个已经存在的容器
     *
     * @param containerId 容器ID
     */
    void start(String clientId, String containerId);

    /**
     * 停止容器
     *
     * @param containerId 停止的容器ID
     */
    void stop(String clientId, String containerId);

    /**
     * 暂停容器
     *
     * @apiNote 暂停指定容器(异步暂停)
     */
    void pause(String clientId, String containerId);

    /**
     * 取消暂停容器
     *
     * @param containerId 容器ID
     * @apiNote 取消暂停容器
     */
    void unpause(String clientId, String containerId);

    /**
     * 移除指定容器
     *
     * @param containerId 容器ID
     */
    void remove(String clientId, String containerId);

    /**
     * 获取容器的资源使用情况
     *
     * @param containerId 容器ID
     */
    void rename(String clientId, String containerId, String newName);

    /**
     * 查询容器的线程信息,默认使用命令aux
     *
     * @param containerId 容器ID
     * @return
     */
    TopContainerResponse top(String clientId, String containerId);

    /**
     * 查询容器详情
     *
     * @param containerId
     * @return
     */
    InspectContainerResponse inspect(String clientId, String containerId);

    /**
     * 容器日志
     */
    void logs(String clientId, String containerId, String... cmd);
}
