package com.yida.data.school.news.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yida.data.common.core.entity.CurrentUser;
import com.yida.data.common.core.entity.notice.EduNoticeSchool;
import com.yida.data.school.dto.news.ListNoticeDTO;
import com.yida.data.school.vo.news.SchollNoticeTeacherDraftVO;
import com.yida.data.school.vo.news.SchollNoticeTeacherPublishVO;
import com.yida.data.school.vo.news.SchoolNoticeInfoByParentVO;
import com.yida.data.school.vo.news.SchoolNoticePageVO;
import com.yida.data.school.vo.news.SchoolNoticeReceiveParentVO;
import java.util.List;

public interface EduNoticeSchoolService extends IService<EduNoticeSchool> {

    /**
     * 保存、编辑公告
     *
     * @param noticeSchool
     * @param currentUser
     */
    void saveNotice(EduNoticeSchool noticeSchool, CurrentUser currentUser);

    /**
     * 发送公告
     */
    void sendNotice(EduNoticeSchool eduNoticeSchool);

    /**
     * 发送公告
     */
    void sendNotice(Long noticeId);

    void removeNotice(List<Long> noticeIds);

    /**
     * 分页列表查询
     */
    IPage<SchoolNoticePageVO> listNoticePage(ListNoticeDTO dto);

    EduNoticeSchool getNoticeInfo(Long id);

    /**
     * 家长查询通知详情
     */
    SchoolNoticeInfoByParentVO getNoticeInfoByParent(Long id, Long parentId);

    void retrySendNotice(Long id);

    /**
     * 确认通知
     */
    void confirmNotice(Long parentId, Long noticeId);

    /**
     * 查询个人显示的通知列表
     */
    IPage<SchoolNoticePageVO> listShowNoticePage(Long schoolId,
        Long parentId, Integer isPublic,
        Integer pageNum,
        Integer pageSize);

    List<SchoolNoticePageVO> listNotice(ListNoticeDTO dto);

    /**
     * 分页查询教师发布公告
     */
    IPage<SchollNoticeTeacherPublishVO> listPublishNoticeByStaffPage(Long schoolId, Long userId, String title, Integer pageNum,
        Integer pageSize);

    /**
     * 分页查询教师发布草稿
     */
    IPage<SchollNoticeTeacherDraftVO> listDraftNoticeByStaffPage(Long schoolId, Long userId, String title, Integer pageNum,
        Integer pageSize);

    /**
     * 查询通知接收的家长列表数据
     */
    IPage<SchoolNoticeReceiveParentVO> listReceiveParent(Long noticeId, String name, Integer pageNum, Integer pageSize);

    /**
     * 撤回通知
     */
    Long recallNotice(Long noticeId);
}
