package com.eitc.patient.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.eitc.patient.domain.NoticeManage;
import com.eitc.patient.enums.NoticeManageDisplayStatusEnum;
import com.eitc.patient.mapper.NoticeManageMapper;
import com.eitc.patient.service.INoticeManageService;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * NoticeManageServiceImpl
 *
 * @author mtx
 * @date: 2024/05/17 15:39
 */
@Service
public class NoticeManageServiceImpl extends ServiceImpl<NoticeManageMapper, NoticeManage> implements INoticeManageService {

    /**
     * 检查通知的显示状态。
     * 根据当前时间与通知的开始和结束时间进行比较，确定通知的显示状态。
     * 返回值为：
     * 1：表示通知尚未开始。
     * 2：表示通知正在进行中。
     * 3：表示通知已经结束。
     * 如果无法确定通知状态，则返回null。
     *
     * @param noticeManage 包含通知开始和结束时间的对象。
     * @return 通知的显示状态码。
     */
    @Override
    public Integer checkDisplayStatus(NoticeManage noticeManage) {
        // 获取通知的开始时间
        Date noticeStartTime = noticeManage.getNoticeStartTime();
        // 获取通知的结束时间
        Date noticeEndTime = noticeManage.getNoticeEndTime();
        // 获取当前时间
        Date now = new Date();

        // 比较当前时间与通知开始时间，判断通知是否已经开始
        if (now.compareTo(noticeStartTime) >= 0 && now.compareTo(noticeEndTime) <= 0) {
            // 如果当前时间在通知的开始和结束时间之间，返回状态码2，表示通知正在进行中
            return NoticeManageDisplayStatusEnum.DISPLAY_PROGRESS.getCode();
        } else if (now.compareTo(noticeStartTime) < 0) {
            // 如果当前时间早于通知开始时间，返回状态码1，表示通知尚未开始
            return NoticeManageDisplayStatusEnum.NOT_STARTED.getCode();
        } else if (now.compareTo(noticeEndTime) > 0) {
            // 如果当前时间晚于通知结束时间，返回状态码3，表示通知已经结束
            return NoticeManageDisplayStatusEnum.IS_END.getCode();
        } else {
            // 如果无法确定通知的状态，返回null
            return null;
        }
    }


}
