package auth

import (
	"context"
)

type Manager interface {
	RegisterUser(ctx context.Context, request RegisterUserRequest) (*RegisterUserResponse, error)
	LoginUser(ctx context.Context, request LoginUserRequest) (*LoginUserResponse, error)
	LogoutUser(ctx context.Context, request LogoutUserRequest) error
	GetNewAccessToken(ctx context.Context, request GetNewAccessTokenRequest) (*GetNewAccessTokenResponse, error)
	GetUserEmailVerificationToken(ctx context.Context, uid string) (*GetUserTokenResponse, error)
	CheckTokenIsValid(ctx context.Context, token string) (bool, error)
	GetPermissionsByUsersId(ctx context.Context, id string) (*GetPermissionsByUsersIdResponse, error)
	CheckPermissions(ctx context.Context, required CheckPermissionsRequest) (bool, error)
	GetUserInfo(ctx context.Context, id string) (*UserInfo, error)
	VerifyEmail(ctx context.Context, userID string, token string) error
	GetEmailVerificationStatus(ctx context.Context, userID string) (*GetEmailVerificationResponse, error)
	ResetPassword(ctx context.Context, request ResetPasswordRequest) error
}

type Config struct {
	AuthServerAddr string
	Realm          string
	ClientId       string
	ClientSecret   string
}
