package router

import (
	v1 "github.com/1Panel-dev/1Panel/backend/app/api/v1"
	"github.com/1Panel-dev/1Panel/backend/middleware"
	"github.com/gin-gonic/gin"
)

type ContainerRouter struct{}

func (s *ContainerRouter) InitContainerRouter(Router *gin.RouterGroup) {
	baRouter := Router.Group("containers").
		Use(middleware.JwtAuth()).
		Use(middleware.SessionAuth()).
		Use(middleware.PasswordExpired())
	withRecordRouter := Router.Group("containers").
		Use(middleware.JwtAuth()).
		Use(middleware.SessionAuth()).
		Use(middleware.PasswordExpired()).
		Use(middleware.OperationRecord())
	baseApi := v1.ApiGroupApp.BaseApi
	{
		baRouter.GET("/exec", baseApi.ContainerExec)
		baRouter.GET("/stats/:id", baseApi.ContainerStats)

		baRouter.POST("/search", baseApi.SearchContainer)
		baRouter.POST("/inspect", baseApi.Inspect)
		baRouter.POST("", baseApi.ContainerCreate)
		baRouter.POST("/log", baseApi.ContainerLogs)
		withRecordRouter.POST("operate", baseApi.ContainerOperation)

		baRouter.POST("/repo/search", baseApi.SearchRepo)
		baRouter.PUT("/repo/:id", baseApi.UpdateRepo)
		baRouter.GET("/repo", baseApi.ListRepo)
		withRecordRouter.POST("/repo", baseApi.CreateRepo)
		withRecordRouter.POST("/repo/del", baseApi.DeleteRepo)

		baRouter.POST("/compose/search", baseApi.SearchCompose)
		baRouter.POST("/compose/up", baseApi.CreateCompose)
		baRouter.POST("/compose/operate", baseApi.OperatorCompose)

		baRouter.POST("/template/search", baseApi.SearchComposeTemplate)
		baRouter.PUT("/template/:id", baseApi.UpdateComposeTemplate)
		baRouter.GET("/template", baseApi.ListComposeTemplate)
		withRecordRouter.POST("/template", baseApi.CreateComposeTemplate)
		withRecordRouter.POST("/template/del", baseApi.DeleteComposeTemplate)

		baRouter.POST("/image/search", baseApi.SearchImage)
		baRouter.GET("/image", baseApi.ListImage)
		baRouter.POST("/image/pull", baseApi.ImagePull)
		baRouter.POST("/image/push", baseApi.ImagePush)
		baRouter.POST("/image/save", baseApi.ImageSave)
		baRouter.POST("/image/load", baseApi.ImageLoad)
		baRouter.POST("/image/remove", baseApi.ImageRemove)
		baRouter.POST("/image/tag", baseApi.ImageTag)
		baRouter.POST("/image/build", baseApi.ImageBuild)

		baRouter.POST("/network/del", baseApi.DeleteNetwork)
		baRouter.POST("/network/search", baseApi.SearchNetwork)
		baRouter.POST("/network", baseApi.CreateNetwork)
		baRouter.POST("/volume/del", baseApi.DeleteVolume)
		baRouter.POST("/volume/search", baseApi.SearchVolume)
		baRouter.GET("/volume", baseApi.ListVolume)
		baRouter.POST("/volume", baseApi.CreateVolume)

		baRouter.GET("/daemonjson", baseApi.LoadDaemonJson)
		baRouter.POST("/daemonjson/update", baseApi.UpdateDaemonJson)
		baRouter.POST("/daemonjson/update/byfile", baseApi.UpdateDaemonJsonByFile)
	}
}
