package jnpf.attendance.service.handle.notice;

import cn.hutool.core.collection.CollUtil;
import jnpf.attendance.antifreeze.UserAntifreeze;
import jnpf.base.UserInfo;
import jnpf.model.attendance.model.AttendanceNoticeModel;
import jnpf.model.attendance.model.SystemNoticeStrategy;
import jnpf.permission.model.user.PartUserInfoVo;
import jnpf.util.UserProvider;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;
import java.util.Objects;

/**
 *
 * @param <T> 作为详情展示及IM消息内容的实体
 */
public interface AttendanceNotice<T, V extends AttendanceNoticeModel> {

    /**
     * 通过当前通知发送的条件实现（前置条件）
     * @param attendanceNoticeModel
     * @return
     */
    Boolean isPass(V attendanceNoticeModel);

    /**
     * 生成记录数据，用于详情及im消息展示
     * @param attendanceNoticeModel 过程数据
     * @return
     */
    List<T> generatingData(V attendanceNoticeModel);

    /**
     * 设置接收人
     * @param attendanceNoticeModel 过程数据
     */
    List<String> getRecipient(V attendanceNoticeModel);
    /**
     * 设置系统通知策略
     * @param attendanceNoticeModel 过程数据
     * @return
     */
    SystemNoticeStrategy setSystemNoticeStrategy(V attendanceNoticeModel, String noticeId);

    /**
     * 设置im通知内容部分，如需要请使用/br换行
     * @param data 详情展示及IM消息内容的实体集合
     * @return
     */
    String getContext(List<T> data);
}
