package cmd

import (
	"context"
	"github.com/goflyfox/gtoken/gtoken"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/net/ghttp"
	"github.com/gogf/gf/v2/os/gcmd"
	"link_homework/internal/controller/homework"
)

var (
	Main = gcmd.Command{
		Name:  "main",
		Usage: "main",
		Brief: "start http server",
		Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
			s := g.Server()
			//后台

			//启动gtoken
			// 创建一个GfToken对象,用于处理用户登录、登出、权限验证等操作
			gfToken := &gtoken.GfToken{
				// 设置登录路径,即用户登录接口登入成功后会获得一个Token
				LoginPath: "/login",
				//// 设置登录前执行的函数,在用户登录之前会调用这个函数进行一些预处理,比如验证用户名和密码等。
				//LoginBeforeFunc: loginFunc,	//手动编写	没有同时配置登入路径,登入方法,登出路径启动时会报错
				// 设置登出路径,即用户登出接口登入成功后会删除Token
				LogoutPath: "/logout",
				//// 设置需要拦截的路径,按照前缀拦截,所有以/user或/system开头的路径都需要进行Token认证。
				//AuthPaths: g.SliceStr{"/user", "/system"},
				//// 设置不需要拦截的路径,所有以/user/info或/system/user/开头的路径都不需要进行Token认证。
				//AuthExcludePaths: g.SliceStr{"/user/info", "/system/user/*"},
				//// 开启全局拦截,默认关闭,如果设置为true,则所有请求都会经过Token认证中间件,如果设置为false,则只有指定路径的请求会经过Token认证中间件。
				//GlobalMiddleware: true,
			}
			s.Group("/api/homework_manage", func(group *ghttp.RouterGroup) {
				//group.Middleware(middleware.MiddlewareIsLogin)
				gfToken.Middleware(ctx, group)
				//直接写接口,不用再分组
				group.POST("/get-homework-list", homework.Homework().GetHomeworkList)
			})
			//客户端
			s.Group("/api/homework_client", func(group *ghttp.RouterGroup) {
				//group.Middleware(middleware.MiddlewareIsLogin)
				gfToken.Middleware(ctx, group)
				//直接写接口,不用再分组
			})
			s.Run()

			return nil
		},
	}
)