package com.jeesharp.business.member.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.math.BigDecimal;
import java.util.List;

/**
 * 用户中心VO - 整合个人信息所有相关数据
 *
 * @author jeesharp
 */
@Data
@Schema(description = "用户中心数据")
public class UserCenterVO {

    // ==================== 基本信息 ====================

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

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

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

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

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

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

    @Schema(description = "手机号（脱敏）", example = "138****5678")
    private String mobile;

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

    @Schema(description = "生日", example = "1990-01-15")
    private String birthday;

    // ==================== 会员等级 ====================

    @Schema(description = "等级编码")
    private String levelCode;

    @Schema(description = "等级名称")
    private String levelName;

    @Schema(description = "等级图标")
    private String levelIcon;

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

    @Schema(description = "下一等级名称")
    private String nextLevelName;

    @Schema(description = "下一等级所需成长值")
    private Integer nextLevelGrowth;

    @Schema(description = "距离下一等级还需成长值")
    private Integer remainGrowth;

    @Schema(description = "成长值进度百分比（0-100）")
    private Integer growthProgress;

    @Schema(description = "等级折扣率", example = "0.95")
    private BigDecimal discountRate;

    @Schema(description = "积分倍率", example = "1.5")
    private BigDecimal pointsRate;

    // ==================== 资产概览 ====================

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

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

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

    @Schema(description = "冻结余额")
    private BigDecimal frozenBalance;

    @Schema(description = "可用优惠券数量")
    private Integer couponCount;

    @Schema(description = "即将过期的优惠券数量")
    private Integer expiringSoonCouponCount;

    // ==================== 订单统计 ====================

    @Schema(description = "待付款订单数")
    private Integer pendingPaymentCount;

    @Schema(description = "待发货订单数")
    private Integer pendingShipmentCount;

    @Schema(description = "待收货订单数")
    private Integer pendingReceiveCount;

    @Schema(description = "待评价订单数")
    private Integer pendingReviewCount;

    @Schema(description = "售后中订单数")
    private Integer afterSaleCount;

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

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

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

    @Schema(description = "邀请获得积分")
    private Integer inviteRewardPoints;

    // ==================== 认证状态 ====================

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

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

    @Schema(description = "是否绑定手机：0-否 1-是")
    private Integer isBindMobile;

    @Schema(description = "是否设置密码：0-否 1-是")
    private Integer isSetPassword;

    @Schema(description = "是否绑定微信：0-否 1-是")
    private Integer isBindWechat;

    // ==================== 签到信息 ====================

    @Schema(description = "今日是否已签到")
    private Boolean todaySigned;

    @Schema(description = "连续签到天数")
    private Integer continuousSignDays;

    // ==================== 消息通知 ====================

    @Schema(description = "未读消息总数")
    private Integer unreadMessageCount;

    // ==================== 会员特权 ====================

    @Schema(description = "会员特权列表")
    private List<String> privileges;

    // ==================== 其他 ====================

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

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

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

    @Schema(description = "收藏商品数")
    private Integer favoriteProductCount;

    @Schema(description = "浏览足迹数")
    private Integer browseHistoryCount;

    @Schema(description = "收货地址数")
    private Integer addressCount;
}
