package com.zsElectric.boot.thirdParty.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;

/**
 * 用户信息查询响应参数 (data加密前的内容)
 *
 * @author wzq
 */
@Data
public class QueryUserInfoResponseData implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 是否新用户 (0-否 1-是)
     */
    @JsonProperty("isNewUser")
    private Integer isNewUser;

    /**
     * 用户信息
     */
    @JsonProperty("userInfo")
    private UserInfoItem userInfo;

    /**
     * 账户信息
     */
    @JsonProperty("accountInfo")
    private AccountInfoItem accountInfo;

    /**
     * 用户信息
     */
    @Data
    public static class UserInfoItem implements Serializable {

        @Serial
        private static final long serialVersionUID = 1L;

        /**
         * 用户ID
         */
        @JsonProperty("userId")
        private Long userId;

        /**
         * 昵称
         */
        @JsonProperty("nickName")
        private String nickName;

        /**
         * 手机号
         */
        @JsonProperty("phone")
        private String phone;

        /**
         * 微信openid
         */
        @JsonProperty("openid")
        private String openid;
    }

    /**
     * 账户信息
     */
    @Data
    public static class AccountInfoItem implements Serializable {

        @Serial
        private static final long serialVersionUID = 1L;

        /**
         * 账户ID
         */
        @JsonProperty("accountId")
        private Long accountId;

        /**
         * 可用抵用券余额
         */
        @JsonProperty("balance")
        private BigDecimal balance;

        /**
         * 兑换余额
         */
        @JsonProperty("redeemBalance")
        private BigDecimal redeemBalance;

        /**
         * 积分
         */
        @JsonProperty("integral")
        private BigDecimal integral;
    }

    /**
     * 创建成功响应数据
     */
    public static QueryUserInfoResponseData of(Integer isNewUser, UserInfoItem userInfo, AccountInfoItem accountInfo) {
        QueryUserInfoResponseData data = new QueryUserInfoResponseData();
        data.setIsNewUser(isNewUser);
        data.setUserInfo(userInfo);
        data.setAccountInfo(accountInfo);
        return data;
    }
}
