package docker

import (
	"context"
	"gowebsocket/common"
	"gowebsocket/controllers"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/client"
	"github.com/gin-gonic/gin"
)

type Image struct {
	Name string `form:"name" binding:"required"`
}

func Run(c *gin.Context) {
	var image Image
	err := c.Bind(&image)
	if err != nil {
		c.JSON(common.ParameterIllegal, gin.H{"error": err.Error()})
		return
	}
	q := c.Request.URL.Query()
	// 获取镜像名称
	imageName := q.Get("name")

	ctx := context.Background()
	cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
	if err != nil {
		c.JSON(common.ServerError, gin.H{"error": err.Error()})
		return
	}
	resp, err := cli.ContainerCreate(ctx, &container.Config{
		Image: imageName,
	}, nil, nil, nil, "")
	if err != nil {
		c.JSON(common.ServerError, gin.H{"error": err.Error()})
		return
	}

	if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil {
		panic(err)
	}
	data := make(map[string]interface{})
	data["image_id"] = resp.ID

	controllers.Response(c, common.OK, "", data)
}
