package com.red.circle.other.inner.model.dto.user;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;

import com.red.circle.other.inner.model.dto.user.props.UserUsePropsDTO;
import lombok.Data;

/**
 * 用户简化资料（用于动态列表等场景，减少数据传输量）.
 *
 * @author pengshigang
 * @since 2025-01-29
 */
@Data
public class UserSimpleProfileDTO implements Serializable {

  @Serial
  private static final long serialVersionUID = 1L;

  /**
   * 用户id.
   */
  @JsonSerialize(using = ToStringSerializer.class)
  private Long id;

  /**
   * 账号.
   */
  private String account;

  /**
   * 头像.
   */
  private String userAvatar;

  /**
   * 用户昵称.
   */
  private String userNickname;

  private Integer age;

  /**
   * 用户性别:0 女，1 男.
   */
  private Integer userSex;

  /**
   * 靓号信息.
   */
  private OwnSpecialIdDTO ownSpecialId;

  /**
   * 使用的道具.
   */
  private List<UserUsePropsDTO> useProps;

  /**
   * 佩戴的勋章.
   */
  private List<SimpleBadgeDTO> wearBadge;

  /**
   * 简化的道具信息.
   */
  @Data
  public static class SimplePropsDTO implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 道具类型.
     */
    private String type;

    /**
     * 道具名称.
     */
    private String name;

    /**
     * 封面图.
     */
    private String cover;

    /**
     * 资源链接.
     */
    private String sourceUrl;

    /**
     * 扩展内容.
     */
    private String expand;

    /**
     * 过期时间.
     */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long expireTime;
  }

  /**
   * 简化的勋章信息.
   */
  @Data
  public static class SimpleBadgeDTO implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键标识.
     */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /**
     * 徽章名称.
     */
    private String name;

    /**
     * 选中url.
     */
    private String selectUrl;

    /**
     * 没有选中的url.
     */
    private String notSelectUrl;

    /**
     * 动画链接.
     */
    private String animationUrl;
  }

}
