package com.yolo.keyboard.controller.admin.userinvitecodes.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import cn.idev.excel.annotation.*;

@Schema(description = "管理后台 - 用户生成的邀请码表，用于邀请新用户注册/安装并建立邀请关系 Response VO")
@Data
@ExcelIgnoreUnannotated
public class KeyboardUserInviteCodesRespVO {

    @Schema(description = "邀请码主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3053")
    @ExcelProperty("邀请码主键ID")
    private Long id;

    @Schema(description = "邀请码字符串，对外展示，唯一", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("邀请码字符串，对外展示，唯一")
    private String code;

    @Schema(description = "邀请码所属用户ID（邀请人）", requiredMode = Schema.RequiredMode.REQUIRED, example = "14170")
    @ExcelProperty("邀请码所属用户ID（邀请人）")
    private Long ownerUserId;

    @Schema(description = "邀请码状态：1=启用，0=停用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty("邀请码状态：1=启用，0=停用")
    private Short status;

    @Schema(description = "邀请码创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("邀请码创建时间")
    private LocalDateTime createdAt;

    @Schema(description = "邀请码过期时间，NULL表示永久有效")
    @ExcelProperty("邀请码过期时间，NULL表示永久有效")
    private LocalDateTime expiresAt;

    @Schema(description = "邀请码最大可使用次数，NULL表示不限次数")
    @ExcelProperty("邀请码最大可使用次数，NULL表示不限次数")
    private Integer maxUses;

    @Schema(description = "邀请码已使用次数", requiredMode = Schema.RequiredMode.REQUIRED, example = "25037")
    @ExcelProperty("邀请码已使用次数")
    private Integer usedCount;
    
    @Schema(description = "邀请码所属租户", example = "17355")
    @ExcelProperty("邀请码所属租户")
    private Long ownerTenantId;

    @Schema(description = "邀请码所属系统用户ID（邀请人）", example = "772")
    @ExcelProperty("邀请码所属系统用户")
    private Long ownerSystemUserId;

    @Schema(description = "邀请码类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @ExcelProperty("邀请码类型")
    private String inviteType;

}