// Code generated by goctl. DO NOT EDIT.
// goctl 1.10.1

package types

type APIErrorStatus struct {
	Code    int64       `json:"code"`
	Message string      `json:"message"`
	Error   ErrorDetail `json:"error"`
}

type AssignUserRoleByUIDReq struct {
	UID    string `path:"uid"`                                                                                                  // 使用者 UID（path）
	RoleID string `json:"role_id" validate:"required"`                                                                          // 要指派的 Role ID
	Source string `json:"source,optional,options=manual|zitadel|ldap|scim" validate:"omitempty,oneof=manual zitadel ldap scim"` // 指派來源；可選值: manual / zitadel / ldap / scim（預設 manual）
}

type AssignUserRoleReq struct {
	RoleID string `json:"role_id" validate:"required"`                                                                          // 要指派的 Role ID
	Source string `json:"source,optional,options=manual|zitadel|ldap|scim" validate:"omitempty,oneof=manual zitadel ldap scim"` // 指派來源；可選值: manual / zitadel / ldap / scim（預設 manual）
}

type AuthTokenData struct {
	AccessToken  string `json:"access_token"`
	RefreshToken string `json:"refresh_token"`
	ExpiresIn    int64  `json:"expires_in"`
	UID          string `json:"uid"`
	TokenType    string `json:"token_type"`
}

type AuthTokenOKStatus struct {
	Code    int64         `json:"code"`
	Message string        `json:"message"`
	Data    AuthTokenData `json:"data"`
}

type ChangePasswordData struct {
	OK bool `json:"ok"`
}

type ChangePasswordReq struct {
	CurrentPassword string `json:"current_password" validate:"required,min=8,max=128"`   // 目前密碼
	NewPassword     string `json:"new_password" validate:"required,min=8,max=128"`       // 新密碼
	StepUpToken     string `json:"step_up_token,optional"`                               // TOTP 已啟用：與 totp_code 二擇一
	TOTPCode        string `json:"totp_code,optional" validate:"omitempty,min=6,max=32"` // TOTP 已啟用：與 step_up_token 二擇一
}

type CreateRoleReq struct {
	Key         string `json:"key" validate:"required,min=2,max=64"`                                     // 角色 key（2-64 字元，不可以 system. / platform_ 開頭）
	DisplayName string `json:"display_name,optional"`                                                    // 角色顯示名稱（給人看的）
	Status      string `json:"status,optional,options=open|close" validate:"omitempty,oneof=open close"` // 角色狀態；可選值: open / close（預設 open）
}

type DeleteRoleByIDReq struct {
	ID string `path:"id"` // Role ID（path）
}

type DeleteRoleMappingReq struct {
	ExternalSource string `json:"external_source,options=zitadel|ldap|scim" validate:"required,oneof=zitadel ldap scim"` // 外部來源；可選值: zitadel / ldap / scim
	ExternalKey    string `json:"external_key" validate:"required"`                                                      // 外部群組 / claim 的 key
}

type EmptyOKStatus struct {
	Code    int64  `json:"code"`
	Message string `json:"message"`
}

type ErrorDetail struct {
	BizCode  string `json:"biz_code"`
	Scope    uint32 `json:"scope,omitempty"`
	Category uint32 `json:"category,omitempty"`
	Detail   uint32 `json:"detail,omitempty"`
}

type GetRolePermissionsByIDReq struct {
	ID string `path:"id"` // Role ID（path）
}

type ListUserRolesReq struct {
	UID string `path:"uid"` // 使用者 UID（path）
}

type LoginData struct {
	AccessToken    string `json:"access_token,optional"`
	RefreshToken   string `json:"refresh_token,optional"`
	ExpiresIn      int64  `json:"expires_in,optional"`
	UID            string `json:"uid,optional"`
	TokenType      string `json:"token_type,optional"`
	MFARequired    bool   `json:"mfa_required,optional"`
	MFAChallengeID string `json:"mfa_challenge_id,optional"`
	MFAExpiresIn   int    `json:"mfa_expires_in,optional"`
}

type LoginMFAConfirmReq struct {
	TenantSlug  string `json:"tenant_slug" validate:"required"`       // 租戶 slug
	ChallengeID string `json:"challenge_id" validate:"required"`      // 密碼登入後回傳的 MFA challenge ID
	Code        string `json:"code" validate:"required,min=6,max=32"` // TOTP 6 碼或備援碼
}

type LoginOKStatus struct {
	Code    int64     `json:"code"`
	Message string    `json:"message"`
	Data    LoginData `json:"data"`
}

type LoginReq struct {
	TenantSlug string `json:"tenant_slug" validate:"required"`            // 租戶 slug
	Email      string `json:"email" validate:"required,email"`            // 電子郵件
	Password   string `json:"password" validate:"required,min=8,max=128"` // 密碼（8-128 字元）
}

type LoginSocialCallbackReq struct {
	Code  string `form:"code" validate:"required"`  // IdP 回傳的 OAuth authorization code
	State string `form:"state" validate:"required"` // IdP 回傳的 OAuth state（對應 session）
}

type LoginSocialStartData struct {
	OauthURL  string `json:"oauth_url"`
	SessionID string `json:"session_id"`
	ExpiresIn int    `json:"expires_in"`
}

type LoginSocialStartOKStatus struct {
	Code    int64                `json:"code"`
	Message string               `json:"message"`
	Data    LoginSocialStartData `json:"data"`
}

type LoginSocialStartReq struct {
	TenantSlug  string `json:"tenant_slug" validate:"required"`                                    // 租戶 slug
	Provider    string `json:"provider,options=google|ldap" validate:"required,oneof=google ldap"` // 第三方登入提供者；可選值: google / ldap
	RedirectURI string `json:"redirect_uri" validate:"required,url"`                               // OAuth 完成後要 redirect 回的 URI
}

type LogoutData struct {
	OK bool `json:"ok"`
}

type LogoutOKStatus struct {
	Code    int64      `json:"code"`
	Message string     `json:"message"`
	Data    LogoutData `json:"data"`
}

type MePermissionsData struct {
	UID         string            `json:"uid"`
	TenantID    string            `json:"tenant_id"`
	Roles       []string          `json:"roles"`
	Permissions map[string]string `json:"permissions"`
	Tree        []PermissionNode  `json:"tree,omitempty"`
}

type MePermissionsOKStatus struct {
	Code    int64             `json:"code"`
	Message string            `json:"message"`
	Data    MePermissionsData `json:"data"`
}

type MePermissionsQuery struct {
	IncludeTree bool `form:"include_tree,optional"` // 是否同時回傳 permission tree（true 會多包一份樹狀結構）
}

type MemberMeData struct {
	TenantID              string `json:"tenant_id"`
	UID                   string `json:"uid"`
	ZitadelEmail          string `json:"zitadel_email,omitempty"`
	DisplayName           string `json:"display_name,omitempty"`
	Avatar                string `json:"avatar,omitempty"`
	Phone                 string `json:"phone,omitempty"`
	Language              string `json:"language,omitempty"`
	Currency              string `json:"currency,omitempty"`
	Status                string `json:"status"`
	Origin                string `json:"origin"`
	BusinessEmail         string `json:"business_email,omitempty"`
	BusinessEmailVerified bool   `json:"business_email_verified"`
	BusinessPhone         string `json:"business_phone,omitempty"`
	BusinessPhoneVerified bool   `json:"business_phone_verified"`
	TOTPEnrolled          bool   `json:"totp_enrolled"`
	CreateAt              int64  `json:"create_at"`
	UpdateAt              int64  `json:"update_at"`
}

type MemberMeOKStatus struct {
	Code    int64        `json:"code"`
	Message string       `json:"message"`
	Data    MemberMeData `json:"data"`
}

type PasswordForgotData struct {
	ChallengeID string `json:"challenge_id"`
	ExpiresIn   int    `json:"expires_in"`
}

type PasswordForgotOKStatus struct {
	Code    int64              `json:"code"`
	Message string             `json:"message"`
	Data    PasswordForgotData `json:"data"`
}

type PasswordForgotReq struct {
	TenantSlug string `json:"tenant_slug" validate:"required"` // 租戶 slug
	Email      string `json:"email" validate:"required,email"` // 登入 Email
}

type PasswordResetData struct {
	OK bool `json:"ok"`
}

type PasswordResetOKStatus struct {
	Code    int64             `json:"code"`
	Message string            `json:"message"`
	Data    PasswordResetData `json:"data"`
}

type PasswordResetReq struct {
	TenantSlug  string `json:"tenant_slug" validate:"required"`                // 租戶 slug
	ChallengeID string `json:"challenge_id" validate:"required"`               // 忘記密碼 OTP challenge ID
	Code        string `json:"code" validate:"required,len=6"`                 // 6 位數 OTP
	NewPassword string `json:"new_password" validate:"required,min=8,max=128"` // 新密碼
}

type PermissionCatalogData struct {
	Tree []PermissionNode `json:"tree,omitempty"`
	List []PermissionNode `json:"list,omitempty"`
}

type PermissionCatalogOKStatus struct {
	Code    int64                 `json:"code"`
	Message string                `json:"message"`
	Data    PermissionCatalogData `json:"data"`
}

type PermissionCatalogQuery struct {
	Status string `form:"status,optional,options=open|close" validate:"omitempty,oneof=open close"`                               // 狀態篩選；可選值: open / close
	Type   string `form:"type,optional,options=backend_user|frontend_user" validate:"omitempty,oneof=backend_user frontend_user"` // 權限類型篩選；可選值: backend_user / frontend_user
	Tree   bool   `form:"tree,optional"`                                                                                          // 是否回傳樹狀結構（false 則扁平 list）
}

type PermissionNode struct {
	ID          string           `json:"id"`
	Parent      string           `json:"parent,omitempty"`
	Name        string           `json:"name"`
	HTTPMethods string           `json:"http_methods,omitempty"`
	HTTPPath    string           `json:"http_path,omitempty"`
	Status      string           `json:"status"`
	Type        string           `json:"type"`
	Children    []PermissionNode `json:"children,omitempty"`
}

type PingData struct {
	Pong string `json:"pong"`
}

type PingOKStatus struct {
	Code    int64    `json:"code"`
	Message string   `json:"message"`
	Data    PingData `json:"data"`
}

type PolicyReloadData struct {
	Tenant string `json:"tenant"`
	TS     int64  `json:"ts"`
}

type PolicyReloadOKStatus struct {
	Code    int64            `json:"code"`
	Message string           `json:"message"`
	Data    PolicyReloadData `json:"data"`
}

type PolicyReloadReq struct {
	TenantID string `json:"tenant_id,optional"` // 指定要 reload 的租戶 ID；留空則 reload 所有租戶
}

type RegisterConfirmReq struct {
	TenantSlug  string `json:"tenant_slug" validate:"required"`  // 租戶 slug
	ChallengeID string `json:"challenge_id" validate:"required"` // 註冊流程的 OTP challenge ID（由 /register 回傳）
	Code        string `json:"code" validate:"required,len=6"`   // 6 位數 OTP 驗證碼
}

type RegisterData struct {
	ChallengeID string `json:"challenge_id"`
	ExpiresIn   int    `json:"expires_in"`
	UID         string `json:"uid"`
}

type RegisterOKStatus struct {
	Code    int64        `json:"code"`
	Message string       `json:"message"`
	Data    RegisterData `json:"data"`
}

type RegisterReq struct {
	TenantSlug         string `json:"tenant_slug" validate:"required"`            // 租戶 slug（小寫英數）
	InviteCode         string `json:"invite_code" validate:"required"`            // 邀請碼
	Email              string `json:"email" validate:"required,email"`            // 電子郵件
	Password           string `json:"password" validate:"required,min=8,max=128"` // 密碼（8-128 字元）
	DisplayName        string `json:"display_name,optional"`                      // 顯示名稱（可選）
	Language           string `json:"language,optional"`                          // 語系代碼，如 zh-TW / en（可選）
	AcceptTermsVersion string `json:"accept_terms_version" validate:"required"`   // 使用者接受的服務條款版本
	MarketingOptIn     bool   `json:"marketing_opt_in,optional"`                  // 是否同意接收行銷訊息
}

type RegisterResendReq struct {
	TenantSlug  string `json:"tenant_slug" validate:"required"`  // 租戶 slug
	ChallengeID string `json:"challenge_id" validate:"required"` // 註冊流程的 OTP challenge ID
}

type RegisterResumeReq struct {
	TenantSlug string `json:"tenant_slug" validate:"required"` // 租戶 slug
	Email      string `json:"email" validate:"required,email"` // 註冊 Email
}

type RegisterSocialCallbackReq struct {
	Code  string `form:"code" validate:"required"`  // IdP 回傳的 OAuth authorization code
	State string `form:"state" validate:"required"` // IdP 回傳的 OAuth state（對應 session）
}

type RegisterSocialStartData struct {
	OauthURL  string `json:"oauth_url"`
	SessionID string `json:"session_id"`
	ExpiresIn int    `json:"expires_in"`
}

type RegisterSocialStartOKStatus struct {
	Code    int64                   `json:"code"`
	Message string                  `json:"message"`
	Data    RegisterSocialStartData `json:"data"`
}

type RegisterSocialStartReq struct {
	TenantSlug         string `json:"tenant_slug" validate:"required"`                                    // 租戶 slug
	InviteCode         string `json:"invite_code" validate:"required"`                                    // 邀請碼
	Provider           string `json:"provider,options=google|ldap" validate:"required,oneof=google ldap"` // 第三方登入提供者；可選值: google / ldap
	AcceptTermsVersion string `json:"accept_terms_version" validate:"required"`                           // 使用者接受的服務條款版本
	Language           string `json:"language,optional"`                                                  // 語系代碼，如 zh-TW / en（可選）
	RedirectURI        string `json:"redirect_uri" validate:"required,url"`                               // OAuth 完成後要 redirect 回的 URI
	MarketingOptIn     bool   `json:"marketing_opt_in,optional"`                                          // 是否同意接收行銷訊息
}

type ReplaceRolePermissionsByIDReq struct {
	ID            string   `path:"id"`             // Role ID（path）
	PermissionIDs []string `json:"permission_ids"` // 要勾選的 Permission ID 陣列（全量取代，會自動補齊父權限）
}

type ReplaceRolePermissionsReq struct {
	PermissionIDs []string `json:"permission_ids"` // 要勾選的 Permission ID 陣列（全量取代，會自動補齊父權限）
}

type RevokeUserRoleByIDReq struct {
	UID    string `path:"uid"`     // 使用者 UID（path）
	RoleID string `path:"role_id"` // Role ID（path）
}

type RoleData struct {
	ID          string `json:"id"`
	TenantID    string `json:"tenant_id"`
	Key         string `json:"key"`
	DisplayName string `json:"display_name"`
	CreatorUID  string `json:"creator_uid,omitempty"`
	Status      string `json:"status"`
	IsSystem    bool   `json:"is_system"`
	CreateAt    int64  `json:"create_at"`
	UpdateAt    int64  `json:"update_at"`
}

type RoleListData struct {
	Roles []RoleData `json:"roles"`
}

type RoleListOKStatus struct {
	Code    int64        `json:"code"`
	Message string       `json:"message"`
	Data    RoleListData `json:"data"`
}

type RoleMappingData struct {
	ID              string `json:"id"`
	TenantID        string `json:"tenant_id"`
	ExternalSource  string `json:"external_source"`
	ExternalKey     string `json:"external_key"`
	InternalRoleID  string `json:"internal_role_id"`
	InternalRoleKey string `json:"internal_role_key"`
	CreateAt        int64  `json:"create_at"`
	UpdateAt        int64  `json:"update_at"`
}

type RoleMappingListData struct {
	Mappings []RoleMappingData `json:"mappings"`
	Total    int64             `json:"total"`
	Offset   int64             `json:"offset"`
	Limit    int64             `json:"limit"`
}

type RoleMappingListOKStatus struct {
	Code    int64               `json:"code"`
	Message string              `json:"message"`
	Data    RoleMappingListData `json:"data"`
}

type RoleMappingListQuery struct {
	Source string `form:"source,optional,options=zitadel|ldap|scim" validate:"omitempty,oneof=zitadel ldap scim"` // 外部來源篩選；可選值: zitadel / ldap / scim
	Offset int64  `form:"offset,optional"`                                                                        // 分頁起點（從 0 起算）
	Limit  int64  `form:"limit,optional"`                                                                         // 每頁筆數（最大值由 server 限制）
}

type RoleMappingOKStatus struct {
	Code    int64           `json:"code"`
	Message string          `json:"message"`
	Data    RoleMappingData `json:"data"`
}

type RoleOKStatus struct {
	Code    int64    `json:"code"`
	Message string   `json:"message"`
	Data    RoleData `json:"data"`
}

type RolePermissionsListData struct {
	Permissions []PermissionNode `json:"permissions"`
}

type RolePermissionsListOKStatus struct {
	Code    int64                   `json:"code"`
	Message string                  `json:"message"`
	Data    RolePermissionsListData `json:"data"`
}

type TOTPBackupCodesData struct {
	BackupCodes []string `json:"backup_codes"`
}

type TOTPBackupCodesOKStatus struct {
	Code    int64               `json:"code"`
	Message string              `json:"message"`
	Data    TOTPBackupCodesData `json:"data"`
}

type TOTPEnrollConfirmData struct {
	BackupCodes []string `json:"backup_codes"`
}

type TOTPEnrollConfirmOKStatus struct {
	Code    int64                 `json:"code"`
	Message string                `json:"message"`
	Data    TOTPEnrollConfirmData `json:"data"`
}

type TOTPEnrollConfirmReq struct {
	Code string `json:"code"` // Google Authenticator 顯示的 6 位數 TOTP 碼
}

type TOTPEnrollStartData struct {
	OtpauthURL string `json:"otpauth_url"`
	Issuer     string `json:"issuer"`
	Account    string `json:"account"`
	Digits     int    `json:"digits"`
	PeriodSec  int    `json:"period_seconds"`
	ExpiresIn  int    `json:"expires_in"`
}

type TOTPEnrollStartOKStatus struct {
	Code    int64               `json:"code"`
	Message string              `json:"message"`
	Data    TOTPEnrollStartData `json:"data"`
}

type TOTPStatusData struct {
	Enrolled             bool  `json:"enrolled"`
	EnrolledAt           int64 `json:"enrolled_at,omitempty"`
	BackupCodesRemaining int   `json:"backup_codes_remaining"`
	Digits               int   `json:"digits,omitempty"`
	PeriodSeconds        int   `json:"period_seconds,omitempty"`
}

type TOTPStatusOKStatus struct {
	Code    int64          `json:"code"`
	Message string         `json:"message"`
	Data    TOTPStatusData `json:"data"`
}

type TOTPVerifyData struct {
	StepUpToken string `json:"step_up_token"`
	ExpiresIn   int    `json:"expires_in"`
}

type TOTPVerifyReq struct {
	Code    string `json:"code" validate:"required,min=6,max=32"` // TOTP 6 碼或備援碼
	Purpose string `json:"purpose,optional"`                      // 變更密碼請傳 change_password
}

type TokenExchangeReq struct {
	TenantSlug string `json:"tenant_slug" validate:"required"` // 租戶 slug
	IDToken    string `json:"id_token" validate:"required"`    // ZITADEL 發行的 id_token
}

type TokenRefreshReq struct {
	RefreshToken string `json:"refresh_token" validate:"required"` // 先前核發的 refresh token
}

type UIDPath struct {
	UID string `path:"uid"` // 使用者 UID（path）
}

type UpdateMemberMeReq struct {
	DisplayName string `json:"display_name,optional"` // 顯示名稱（可選）
	Avatar      string `json:"avatar,optional"`       // 頭像 URL（可選）
	Language    string `json:"language,optional"`     // 語系代碼，如 zh-TW / en（可選）
	Currency    string `json:"currency,optional"`     // 幣別代碼，如 TWD / USD（可選）
	Phone       string `json:"phone,optional"`        // 聯絡電話 E.164 格式（可選）
}

type UpdateRoleByIDReq struct {
	ID          string `path:"id"`                                                                       // Role ID（path）
	DisplayName string `json:"display_name,optional"`                                                    // 角色顯示名稱
	Status      string `json:"status,optional,options=open|close" validate:"omitempty,oneof=open close"` // 角色狀態；可選值: open / close
}

type UpdateRoleReq struct {
	DisplayName string `json:"display_name,optional"`                                                    // 角色顯示名稱
	Status      string `json:"status,optional,options=open|close" validate:"omitempty,oneof=open close"` // 角色狀態；可選值: open / close
}

type UpsertRoleMappingReq struct {
	ExternalSource  string `json:"external_source,options=zitadel|ldap|scim" validate:"required,oneof=zitadel ldap scim"` // 外部來源；可選值: zitadel / ldap / scim
	ExternalKey     string `json:"external_key" validate:"required"`                                                      // 外部群組 / claim 的 key（例如 zitadel role 名稱）
	InternalRoleKey string `json:"internal_role_key" validate:"required"`                                                 // 對映的內部角色 key（必須存在於 roles 集合）
}

type UserRoleData struct {
	ID              string `json:"id"`
	TenantID        string `json:"tenant_id"`
	UID             string `json:"uid"`
	RoleID          string `json:"role_id"`
	RoleKey         string `json:"role_key"`
	RoleDisplayName string `json:"role_display_name"`
	Source          string `json:"source"`
	CreateAt        int64  `json:"create_at"`
	UpdateAt        int64  `json:"update_at"`
}

type UserRoleIDPath struct {
	UID    string `path:"uid"`     // 使用者 UID（path）
	RoleID string `path:"role_id"` // Role ID（path）
}

type UserRoleListData struct {
	UserRoles []UserRoleData `json:"user_roles"`
}

type UserRoleListOKStatus struct {
	Code    int64            `json:"code"`
	Message string           `json:"message"`
	Data    UserRoleListData `json:"data"`
}

type UserRoleOKStatus struct {
	Code    int64        `json:"code"`
	Message string       `json:"message"`
	Data    UserRoleData `json:"data"`
}

type VerificationConfirmReq struct {
	ChallengeID string `json:"challenge_id"` // 驗證流程的 OTP challenge ID（由 /start 端點回傳）
	Code        string `json:"code"`         // 6 位數 OTP 驗證碼
}

type VerificationStartData struct {
	ChallengeID string `json:"challenge_id"`
	ExpiresIn   int    `json:"expires_in"`
}

type VerificationStartOKStatus struct {
	Code    int64                 `json:"code"`
	Message string                `json:"message"`
	Data    VerificationStartData `json:"data"`
}

type VerificationStartReq struct {
	Target string `json:"target"` // 驗證目標：email 地址或 E.164 手機號（依端點而定）
}
