package dto

import (
	"strings"
	"time"

	"quyun/v2/app/requests"
	"quyun/v2/pkg/consts"
)

// AdminTenantInviteCreateForm 租户管理员创建邀请码的请求参数。
type AdminTenantInviteCreateForm struct {
	// Code 邀请码（可选）：为空时由后端生成；建议只包含数字/字母，便于人工输入。
	Code string `json:"code"`

	// MaxUses 最大可使用次数（可选）：0 表示不限次数；大于 0 时用尽后自动失效。
	MaxUses *int `json:"max_uses"`

	// ExpiresAt 过期时间（可选）：为空表示不过期；到期后不可再使用。
	ExpiresAt *time.Time `json:"expires_at"`

	// Remark 备注（可选）：用于审计记录生成目的/投放渠道等。
	Remark string `json:"remark"`
}

// AdminTenantInviteDisableForm 租户管理员禁用邀请码的请求参数。
type AdminTenantInviteDisableForm struct {
	// Reason 禁用原因（可选）：用于审计与追溯。
	Reason string `json:"reason"`
}

// AdminTenantInviteListFilter 租户管理员分页查询邀请码列表的过滤条件。
type AdminTenantInviteListFilter struct {
	requests.Pagination

	// Status 按状态过滤（可选）：active/disabled/expired。
	Status *consts.TenantInviteStatus `query:"status" json:"status"`

	// Code 按邀请码模糊过滤（可选）：支持部分匹配（like）。
	Code *string `query:"code" json:"code"`
}

// CodeTrimmed 对 code 进行空白与大小写处理，便于统一查询。
func (f *AdminTenantInviteListFilter) CodeTrimmed() string {
	if f == nil || f.Code == nil {
		return ""
	}
	return strings.ToLower(strings.TrimSpace(*f.Code))
}

// AdminTenantJoinRequestListFilter 租户管理员分页查询加入申请的过滤条件。
type AdminTenantJoinRequestListFilter struct {
	requests.Pagination

	// UserID 按申请人用户ID过滤（可选）。
	UserID *int64 `query:"user_id" json:"user_id"`

	// Status 按申请状态过滤（可选）：pending/approved/rejected。
	Status *consts.TenantJoinRequestStatus `query:"status" json:"status"`
}

// AdminTenantJoinRequestDecideForm 租户管理员通过/拒绝加入申请的请求参数。
type AdminTenantJoinRequestDecideForm struct {
	// Reason 审核说明（可选）：用于审计记录通过/拒绝原因。
	Reason string `json:"reason"`
}
