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

import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.im.center.common.enums.YesOrNo;
import cn.axzo.msg.center.service.pending.card.domain.CardButtonState;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

/**
 * @author yanglin
 */
@Setter
@Getter
public class CardInfo {

    private Long id;

    /**
     * 请求批次号
     */
    private String batchNo;

    /**
     * 调用方标识
     */
    private String appCode;

    /**
     * IM任务id
     */
    private Long imTaskId;

    /**
     * 业务消息ID
     */
    private String bizMessageId;

    /**
     * 卡片编码
     */
    private String identityCode;

    /**
     * 业务编码
     */
    private String bizCode;

    /**
     * 流程类代办的流程结点编码
     */
    private String subBizCode;

    /**
     * 卡片模版编码
     */
    private String templateCode;

    /**
     * 卡片状态.
     */
    private String state;

    /**
     * 标题
     */
    private String title;

    /**
     * 内容
     */
    private String content;

    /**
     * IM卡片信息 (解析后)
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private Object cardContent;

    /**
     * 业务扩展参数
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONObject bizParam;

    /**
     * 路由扩展参数
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONObject routerParam;

    /**
     * 发送者的端
     */
    private AppTypeEnum senderAppType;

    /**
     * 接收的端
     */
    private AppTypeEnum receiverAppType;

    /**
     * 发送人是否为机器人. YES: 是, NO: 否
     */
    private YesOrNo isSenderRobot;

    /**
     * 发起者的自然人ID
     */
    private Long senderPersonId;

    /**
     * 发起人的单位id
     */
    private Long senderOuId;

    /**
     * 发起者项目id
     */
    private Long senderWorkspaceId;

    /**
     * 接收人自然人id
     */
    private Long receiverPersonId;

    /**
     * 接收人单位id
     */
    private Long receiverOuId;

    /**
     * 接收人项目id
     */
    private Long receiverWorkspaceId;

    /**
     * 按钮状态
     */
    private List<CardButtonState> buttonStates;

    /**
     * 副标题
     */
    private String subtitle;

    public JSONObject determineBizParam() {
        if (bizParam == null)
            bizParam = new JSONObject();
        return bizParam;
    }
}
