package com.red.circle.other.inner.model.dto.material.props;

import com.red.circle.other.inner.enums.material.PropsCommodityType;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Objects;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;

/**
 * 用户购买的道具.
 *
 * @author pengliang on 2021/6/2
 */
@Slf4j
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ProductProps implements Serializable {

  @Serial
  private static final long serialVersionUID = 1L;

  /**
   * 实际操作购买发起用户.
   */
  private Long initiateUserId;

  /**
   * 最终接收用户.
   */
  private Long acceptUserId;

  /**
   * 购买天数或数量字段.
   */
  private Integer days;

  /**
   * 商品ID.
   */
  private Long productId;

  /**
   * 商品来源.
   */
  private String propsOrigin;

  /**
   * 道具来源描述.
   */
  private String propsOriginDesc;

  /**
   * 购买的资源.
   */
  private PropsResources propsResources;

  /**
   * 道具价格.
   */
  private BigDecimal propsPrices;

  /**
   * true 累计财富等级，false 不累计财富等级.
   */
  private Boolean appendWealth;

  /**
   * 是否免费，null和true表示免费
   */
  private Boolean free;

  /**
   * 统计来源.不为空统计.
   */
  private String countSysOrigin;

  /**
   * 资源类型.
   */
  public PropsCommodityType propsResourcesType() {
    return PropsCommodityType.valueOf(this.propsResources.getType());
  }

  /**
   * 资源类型-名称.
   */
  public String propsResourcesTypeName() {
    return this.propsResources.getType();
  }

  /**
   * 资源id.
   */
  public Long propsResourcesId() {
    return this.propsResources.getId();
  }

  /**
   * 最终接收人.
   */
  public Long finallyAcceptedUserId() {
    return Objects.nonNull(acceptUserId) ? acceptUserId : initiateUserId;
  }

}
