package com.jeesharp.business.modules.member.vo;

import com.jeesharp.framework.pojo.vo.BaseInfoVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 会员信息VO
 *
 * @author jeesharp
 * @version 2024-01-24
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "会员信息VO")
public class MemberInfoVO extends BaseInfoVO {

    @Schema(description = "会员ID")
    private String id;

    @Schema(description = "会员编号")
    private String memberNo;

    @Schema(description = "会员昵称")
    private String nickname;

    @Schema(description = "真实姓名")
    private String realName;

    @Schema(description = "头像URL")
    private String avatar;

    @Schema(description = "性别：0-未知 1-男 2-女")
    private Integer gender;

    @Schema(description = "性别名称")
    private String genderName;

    @Schema(description = "手机号")
    private String mobile;

    @Schema(description = "邮箱")
    private String email;

    @Schema(description = "身份证号")
    private String idCard;

    @Schema(description = "生日")
    private LocalDate birthday;

    @Schema(description = "省份")
    private String province;

    @Schema(description = "城市")
    private String city;

    @Schema(description = "区县")
    private String district;

    @Schema(description = "详细地址")
    private String address;

    @Schema(description = "备注")
    private String remarks;
    // ==================== 会员等级 ====================

    @Schema(description = "当前会员等级ID")
    private String levelId;

    @Schema(description = "当前会员等级编码")
    private String levelCode;

    @Schema(description = "当前会员等级名称")
    private String levelName;

    @Schema(description = "成长值")
    private Integer growthValue;

    @Schema(description = "等级过期时间")
    private LocalDateTime levelExpireDate;

    @Schema(description = "当前有效付费等级编码")
    private String vipLevelCode;

    @Schema(description = "付费到期时间")
    private LocalDateTime vipExpireDate;

    @Schema(description = "是否付费会员：0-否 1-是")
    private Integer isVip;

    // ==================== 积分信息 ====================

    @Schema(description = "累计获得积分")
    private Integer totalPoints;

    @Schema(description = "可用积分")
    private Integer availablePoints;

    @Schema(description = "冻结积分")
    private Integer frozenPoints;

    @Schema(description = "已使用积分")
    private Integer usedPoints;

    // ==================== 消费统计 ====================

    @Schema(description = "累计消费金额")
    private BigDecimal totalConsumeAmount;

    @Schema(description = "累计消费次数")
    private Integer totalConsumeCount;

    @Schema(description = "最后消费时间")
    private LocalDateTime lastConsumeDate;

    @Schema(description = "平均消费金额")
    private BigDecimal avgConsumeAmount;

    // ==================== 账户信息 ====================

    @Schema(description = "账户余额")
    private BigDecimal balance;

    // ==================== 状态信息 ====================

    @Schema(description = "会员状态：0-禁用 1-正常 2-待审核 3-已注销")
    private Integer status;

    @Schema(description = "会员状态名称")
    private String statusName;

    @Schema(description = "会员来源")
    private String source;

    @Schema(description = "会员来源名称")
    private String sourceName;

    @Schema(description = "是否实名认证")
    private Integer isRealName;

    @Schema(description = "是否完善资料")
    private Integer isCompleteProfile;

    // ==================== 邀请信息 ====================

    @Schema(description = "邀请码")
    private String inviteCode;

    @Schema(description = "成功邀请人数")
    private Integer inviteCount;

    // ==================== 时间信息 ====================

    @Schema(description = "注册时间")
    private LocalDateTime registerDate;

    @Schema(description = "最后登录时间")
    private LocalDateTime lastLoginDate;

    @Schema(description = "登录次数")
    private Integer loginCount;

    @Schema(description = "创建时间")
    private LocalDateTime createDate;
}
