package routine

import (
	limits "github.com/gin-contrib/size"
	"github.com/gin-gonic/gin"
	swaggerfiles "github.com/swaggo/files"
	ginSwagger "github.com/swaggo/gin-swagger"
	"net/http"
	"trading-go/controller"
	"trading-go/docs"
)

func GetRoutine() *gin.Engine {
	r := gin.Default()
	r.Use(controller.Cors)

	// 图片等静态文件
	r.StaticFS("/pics", http.Dir("./pics"))

	// swagger
	docs.SwaggerInfo.BasePath = ""
	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))

	user := r.Group("user")
	{
		user.GET("/:page/:pageSize", controller.GetUserPaged)
		user.GET("info", controller.UserInfo)
		user.POST("modify", controller.ModifyUser)
		user.POST("login", controller.Login)
		user.POST("register", controller.Register)
	}

	chat := r.Group("chat")
	{
		chat.GET("", controller.LinkToServer)
		chat.GET("from/:page/:pageSize", controller.GetMsgFromPaged)
		chat.GET("to/:page/:pageSize", controller.GetMsgToPaged)
	}
	relation := r.Group("relation")
	{
		relation.GET("/:page/:pageSize", controller.GetRePaged)
		relation.POST("create", controller.RCreat)
		relation.GET("friend", controller.GetFriend)
		relation.GET("bad", controller.GetBadRelation)
		relation.DELETE("delete/:id", controller.DRelation)
	}

	category := r.Group("category")
	{
		category.GET("", controller.GetAllCategories)
		category.POST("create", controller.CreateCategory)
		category.DELETE("delete/:id", controller.DCategory)
	}

	pic := r.Group("pic")
	{
		pic.GET("/:page/:pageSize", controller.GetPicPaged)
		pic.POST("upload", limits.RequestSizeLimiter(2<<20), controller.Upload)
		pic.GET("", controller.GetAllPic)
		pic.DELETE("delete/:id", controller.DPic)
	}

	goods := r.Group("goods")
	{
		//goods.GET("", controller.GetAllGoods)
		goods.POST("create", controller.CreatGoods)
		goods.DELETE("delete/:id", controller.DGoods)
		goods.GET("/:page/:pageSize", controller.GetGoodsPage)
		goods.GET("recommend", controller.GetRecommend)
		goods.POST("revise", controller.ReviseGoods)
		goods.GET("detail/:id", controller.GetGoodDetail)
		goods.GET("user/:id", controller.GetUserGoods)
		goods.GET("search/:page/:pageSize", controller.SearchGoods)
		goods.GET("category/:page/:pageSize", controller.GetGoodsCategory)
	}

	order := r.Group("order")
	{
		order.GET("/:page/:pageSize", controller.GetOrderPaged)
		order.GET("", controller.GetAllOrder)
		order.GET("user", controller.GetUserOrder)
		order.POST("revise", controller.ReviseOrder)
		order.POST("create", controller.CreateOrder)
		order.DELETE("delete/:id", controller.DeleteOrder)
	}

	appraise := r.Group("appraise")
	{
		appraise.POST("create", controller.CreateAppraise)
		appraise.GET("/:page/:pageSize", controller.GetAppraisePaged)
		appraise.DELETE("delete/:id", controller.DAppraise)
		appraise.POST("revise", controller.RAppraise)
		appraise.GET("user", controller.GetUserAppraise)
	}
	return r
}