package com.tmerclub.cloud.api.user.vo;

import com.tmerclub.cloud.api.coupon.vo.CouponUserCountDataVO;
import io.swagger.v3.oas.annotations.media.Schema;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 全部会员VO
 *
 * @author tmerclub
 * @date: 2022-04-14
 */
public class UserManagerVO implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    @Schema(description = "用户id")
    private Long userId;

    @Schema(description = "用户名")
    private String userName;

    @Schema(description = "用户昵称")
    private String nickName;

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

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

    @Schema(description = "修改时间")
    private Date updateTime;

    @Schema(description = "注册时间")
    private Date createTime;

    @Schema(description = "M(男) or F(女)")
    private String sex;

    @Schema(description = "出生日期。例如：2009-11-27")
    private String birthDate;

    @Schema(description = "头像图片路径")
    private String pic;

    @Schema(description = "状态 1 正常 0 无效")
    private Integer status;

    @Schema(description = "积分")
    private Long score;

    @Schema(description = "会员成长值")
    private Long growth;

    @Schema(description = "会员等级")
    private Integer level;

    @Schema(description = "等级条件 0 普通会员 1 付费会员")
    private Integer levelType;

    @Schema(description = "vip结束时间")
    private Date vipEndTime;

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

    @Schema(description = "bizUserId")
    private String bizUserId;

    @Schema(description = "付费会员等级")
    private Integer vipLevel;

    @Schema(description = "付费会员等级名称")
    private String vipLevelName;

    // -----------------------------------------------------以上是user 的信息

    @Schema(description = "最近消费时间")
    private Date reConsTime;

    @Schema(description = "消费金额")
    private BigDecimal consAmount;

    @Schema(description = "实付金额")
    private BigDecimal actualAmount;

    @Schema(description = "消费次数")
    private Integer consTimes;

    @Schema(description = "下单次数")
    private Integer allCount;

    @Schema(description = "平均折扣")
    private BigDecimal averDiscount;

    @Schema(description = "充值金额")
    private BigDecimal rechargeAmount;

    @Schema(description = "充值次数")
    private Integer rechargeTimes;

    @Schema(description = "售后金额")
    private BigDecimal afterSaleAmount;

    @Schema(description = "售后次数")
    private Integer afterSaleTimes;

    @Schema(description = "当前积分")
    private Long currentScore;

    @Schema(description = "累积积分")
    private Long sumScore;

    @Schema(description = "当前余额")
    private BigDecimal currentBalance;

    @Schema(description = "累计余额")
    private BigDecimal sumBalance;

    @Schema(description = "分销等级")
    private Integer distributionLevel;

    @Schema(description = "成为分销员的时间")
    private Date distributorTime;

    // ----以下用户详情----------------------------------------------------------------

    @Schema(description = "标签")
    private List<UserTagApiVO> userTagList;

    @Schema(description = "用户优惠券 统计")
    private CouponUserCountDataVO couponUserCountDataVO;

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Integer getVipLevel() {
        return vipLevel;
    }

    public void setVipLevel(Integer vipLevel) {
        this.vipLevel = vipLevel;
    }

    public String getVipLevelName() {
        return vipLevelName;
    }

    public void setVipLevelName(String vipLevelName) {
        this.vipLevelName = vipLevelName;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(String birthDate) {
        this.birthDate = birthDate;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Long getScore() {
        return score;
    }

    public void setScore(Long score) {
        this.score = score;
    }

    public Long getGrowth() {
        return growth;
    }

    public void setGrowth(Long growth) {
        this.growth = growth;
    }

    public Integer getLevel() {
        return level;
    }

    public void setLevel(Integer level) {
        this.level = level;
    }

    public Integer getLevelType() {
        return levelType;
    }

    public void setLevelType(Integer levelType) {
        this.levelType = levelType;
    }

    public Date getVipEndTime() {
        return vipEndTime;
    }

    public void setVipEndTime(Date vipEndTime) {
        this.vipEndTime = vipEndTime;
    }

    public String getLevelName() {
        return levelName;
    }

    public void setLevelName(String levelName) {
        this.levelName = levelName;
    }

    public String getBizUserId() {
        return bizUserId;
    }

    public void setBizUserId(String bizUserId) {
        this.bizUserId = bizUserId;
    }

    public Date getReConsTime() {
        return reConsTime;
    }

    public void setReConsTime(Date reConsTime) {
        this.reConsTime = reConsTime;
    }

    public BigDecimal getConsAmount() {
        return consAmount;
    }

    public void setConsAmount(BigDecimal consAmount) {
        this.consAmount = consAmount;
    }

    public BigDecimal getActualAmount() {
        return actualAmount;
    }

    public void setActualAmount(BigDecimal actualAmount) {
        this.actualAmount = actualAmount;
    }

    public Integer getConsTimes() {
        return consTimes;
    }

    public void setConsTimes(Integer consTimes) {
        this.consTimes = consTimes;
    }

    public BigDecimal getAverDiscount() {
        return averDiscount;
    }

    public void setAverDiscount(BigDecimal averDiscount) {
        this.averDiscount = averDiscount;
    }

    public BigDecimal getRechargeAmount() {
        return rechargeAmount;
    }

    public void setRechargeAmount(BigDecimal rechargeAmount) {
        this.rechargeAmount = rechargeAmount;
    }

    public Integer getRechargeTimes() {
        return rechargeTimes;
    }

    public void setRechargeTimes(Integer rechargeTimes) {
        this.rechargeTimes = rechargeTimes;
    }

    public BigDecimal getAfterSaleAmount() {
        return afterSaleAmount;
    }

    public void setAfterSaleAmount(BigDecimal afterSaleAmount) {
        this.afterSaleAmount = afterSaleAmount;
    }

    public Integer getAfterSaleTimes() {
        return afterSaleTimes;
    }

    public void setAfterSaleTimes(Integer afterSaleTimes) {
        this.afterSaleTimes = afterSaleTimes;
    }

    public Long getCurrentScore() {
        return currentScore;
    }

    public void setCurrentScore(Long currentScore) {
        this.currentScore = currentScore;
    }

    public Long getSumScore() {
        return sumScore;
    }

    public void setSumScore(Long sumScore) {
        this.sumScore = sumScore;
    }

    public BigDecimal getCurrentBalance() {
        return currentBalance;
    }

    public void setCurrentBalance(BigDecimal currentBalance) {
        this.currentBalance = currentBalance;
    }

    public BigDecimal getSumBalance() {
        return sumBalance;
    }

    public void setSumBalance(BigDecimal sumBalance) {
        this.sumBalance = sumBalance;
    }

    public Integer getDistributionLevel() {
        return distributionLevel;
    }

    public void setDistributionLevel(Integer distributionLevel) {
        this.distributionLevel = distributionLevel;
    }

    public Date getDistributorTime() {
        return distributorTime;
    }

    public void setDistributorTime(Date distributorTime) {
        this.distributorTime = distributorTime;
    }

    public List<UserTagApiVO> getUserTagList() {
        return userTagList;
    }

    public void setUserTagList(List<UserTagApiVO> userTagList) {
        this.userTagList = userTagList;
    }

    public CouponUserCountDataVO getCouponUserCountDataVO() {
        return couponUserCountDataVO;
    }

    public void setCouponUserCountDataVO(CouponUserCountDataVO couponUserCountDataVO) {
        this.couponUserCountDataVO = couponUserCountDataVO;
    }

    public Integer getAllCount() {
        return allCount;
    }

    public void setAllCount(Integer allCount) {
        this.allCount = allCount;
    }

    @Override
    public String toString() {
        return "UserManagerVO{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", nickName='" + nickName + '\'' +
                ", email='" + email + '\'' +
                ", phone='" + phone + '\'' +
                ", updateTime=" + updateTime +
                ", createTime=" + createTime +
                ", sex='" + sex + '\'' +
                ", birthDate='" + birthDate + '\'' +
                ", pic='" + pic + '\'' +
                ", status=" + status +
                ", score=" + score +
                ", growth=" + growth +
                ", level=" + level +
                ", levelType=" + levelType +
                ", vipEndTime=" + vipEndTime +
                ", levelName='" + levelName + '\'' +
                ", bizUserId='" + bizUserId + '\'' +
                ", vipLevel=" + vipLevel +
                ", vipLevelName='" + vipLevelName + '\'' +
                ", reConsTime=" + reConsTime +
                ", consAmount=" + consAmount +
                ", actualAmount=" + actualAmount +
                ", consTimes=" + consTimes +
                ", allCount=" + allCount +
                ", averDiscount=" + averDiscount +
                ", rechargeAmount=" + rechargeAmount +
                ", rechargeTimes=" + rechargeTimes +
                ", afterSaleAmount=" + afterSaleAmount +
                ", afterSaleTimes=" + afterSaleTimes +
                ", currentScore=" + currentScore +
                ", sumScore=" + sumScore +
                ", currentBalance=" + currentBalance +
                ", sumBalance=" + sumBalance +
                ", distributionLevel=" + distributionLevel +
                ", distributorTime=" + distributorTime +
                ", userTagList=" + userTagList +
                ", couponUserCountDataVO=" + couponUserCountDataVO +
                '}';
    }
}
