package cn.axzo.msg.center.api.request;

import cn.axzo.basics.common.page.PageRequest;
import cn.axzo.msg.center.api.enums.MsgStateEnum;
import cn.axzo.msg.center.service.dto.IdentityDTO;
import cn.axzo.msg.center.service.enums.IdentityTypeEnum;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.util.Collections;
import java.util.List;

import static java.util.stream.Collectors.toList;

/**
 * @author : liuchuntao
 * @date : 2022/3/21 15:56
 * @description : 消息查询req
 */
@Data
public class CmsMsgQueryReq extends PageRequest {

  /**
   * 关键字
   */
  private String searchKey;


  /**
   * 消息类型 1:普通消息  2:待办
   */
  @NotNull(message = "消息类型必传")
  private Integer msgType;

  /**
   * 身份列表
   */
  private List<IdentityDTO> identities;

  /**
   *  系统类型
   */
  private String systemType;


  /**
   * 普通消息状态
   * 0:消息中心-全部  1:消息中心-未读
   * <p
   * 待办消息状态
   * 1:待办-待处理   2:待办-已完成 3:查询全部
   */
  private int msgStatus;


  /**
   * 待办、消息模块类型Id - 针对待办使用
   */
  private Long moduleId;
  /**
   *
   */
  /*@NotNull(message = "自然人id不能为空")*/
  private Long personId;
  /**
   * 待排除的消息id
   */
  private List<Long> excludeMsgIds;
  /**
   * 查询的状态
   */
  private List<MsgStateEnum> states;
  /**
   * 关系id
   */
  private List<Long> relationIds;

  public List<Integer> knownStateCodes() {
    if (states == null) {
      return Collections.emptyList();
    }
    return states.stream()
            .map(MsgStateEnum::getCode)
            .collect(toList());
  }

  public List<IdentityDTO> determineIdentities() {
    if (identityId != null && userType != null) {
      IdentityTypeEnum identityType = IdentityTypeEnum.codeOf(userType).orElse(null);
      return Collections.singletonList(new IdentityDTO(identityId, identityType));
    }
    return identities;
  }

  // !! 未使用

  /**
   *  用户类型
   * 身份列表
   */
  @Deprecated
  private Integer userType;

  /**
   *
   */
  @Deprecated
  private Long identityId;

  private boolean logRequest = true;
}
