package main

import (
	"github.com/gin-gonic/gin"
	"github.com/tidbcloud/tiinf/sdk/auth"
)

func Example_Use_GinGetIdentityInfo_For_OpenAPI() {
	eng := gin.Default()
	// you need init account client first, the account client is singleton
	auth.InitAccountClientByEndpoint("account-provider-grpc:10000", 0)

	r := eng.Group("/api/v1/test")
	r.Use(
		auth.GinGetIdentityInfoInterceptor(&auth.IdentityAuthOption{
			EnableLog: true,
		}),
		auth.GinPermissionCheckInterceptor(&auth.PermissionCheckerCommonParam{
			IdentityF:               auth.GinGetIdentityFunc,
			PathPattern2ResourceMap: openApiPathPattern2ResourceMap,
			PathWhitelist:           openApiPathWhitelist,
			GenAccessParam4GinF:     auth.GenAccessParam4GinWithPrefixOrgId,
		}),
	)
	// curl -H "Authorization: Bearer xxx" 'http://localhost:8080/api/v1/test?access_org_id=14422'
	r.GET("", ginBizLogic)

	r1 := eng.Group("/api/v1/orgs/:org_id")
	r1.Use(
		auth.GinGetIdentityInfoInterceptor(&auth.IdentityAuthOption{
			EnableLog: true,
		}),
		auth.GinPermissionCheckInterceptor(&auth.PermissionCheckerCommonParam{
			IdentityF:               auth.GinGetIdentityFunc,
			PathPattern2ResourceMap: openApiPathPattern2ResourceMap1,
			PathWhitelist:           openApiPathWhitelist1,
		}),
	)
	// curl -H "Authorization: Bearer xxx" 'http://localhost:8080/api/v1/orgs/14422/test'
	r1.GET("/test", ginBizLogic)

	eng.Run("127.0.0.1:8080")
}

var openApiPathPattern2ResourceMap = map[string]string{
	"/orgs/(\\d+)/api/v1/test": "/orgs/{org_id}/test/owner",
}

var openApiPathWhitelist = []string{
	"/orgs/(\\d+)/health_check",
}

var openApiPathPattern2ResourceMap1 = map[string]string{
	"/api/v1/orgs/(\\d+)/test": "/orgs/{org_id}/test/owner",
}

var openApiPathWhitelist1 = []string{
	"/health_check",
}
