package api

import (
	"github.com/gin-gonic/gin"

	"oci-portal/internal/service"
)

// registerAuthPublic 公开登录/OAuth 路由(不经 JWT)。
func registerAuthPublic(v1 *gin.RouterGroup, auth *service.AuthService, oauth *service.OAuthService, systemLogs *service.SystemLogService) {
	ah := &authHandler{svc: auth, logs: systemLogs}
	v1.POST("/auth/login", ah.login)

	// 外部身份登录:provider 列表 / 授权跳转(bind 模式 handler 内校验 JWT)/ 回调
	ax := &authxHandler{auth: auth, oauth: oauth, logs: systemLogs}
	v1.GET("/auth/oauth/providers", ax.oauthProviders)
	v1.GET("/auth/oauth/:provider/authorize", ax.oauthAuthorize)
	v1.GET("/auth/oauth/:provider/callback", ax.oauthCallback)
}

// registerAuthSecured 登出、两步验证、外部身份管理(JWT 组内)。
func registerAuthSecured(secured *gin.RouterGroup, auth *service.AuthService, oauth *service.OAuthService, settings *service.SettingService, systemLogs *service.SystemLogService) {
	ah := &authHandler{svc: auth, logs: systemLogs}
	secured.POST("/auth/logout", ah.logout)

	ax := &authxHandler{auth: auth, oauth: oauth}
	secured.GET("/auth/totp", ax.totpStatus)
	secured.POST("/auth/totp/setup", ax.totpSetup)
	secured.GET("/auth/credentials", ax.getCredentials)
	secured.PUT("/auth/credentials", ax.updateCredentials)
	secured.GET("/auth/identities", ax.identities)
	secured.POST("/auth/totp/activate", ax.totpActivate)
	secured.POST("/auth/totp/disable", ax.totpDisable)
	secured.PUT("/auth/password-login", ax.updatePasswordLogin)
	secured.DELETE("/auth/identities/:id", ax.unbindIdentity)
	secured.POST("/auth/revoke-sessions", ax.revokeSessions)
	secured.GET("/settings/oauth", func(c *gin.Context) { ax.getOAuthSettings(c, settings) })
	secured.PUT("/settings/oauth", func(c *gin.Context) { ax.updateOAuthSettings(c, settings) })
}
