package com.hzs.system.base.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.system.base.BdNotice;
import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.common.domain.system.config.BdGrade;
import com.hzs.common.domain.system.ext.BdNoticeExt;
import com.hzs.system.base.vo.BdNoticeVO;
import com.hzs.system.base.vo.NoticePetitionVO;

import java.util.List;
import java.util.Map;

/**
 * 公告表 服务类
 */
public interface IBdNoticeService extends IService<BdNotice> {

    /**
     * 保存公告信息
     *
     * @param noticeVO 公告信息
     * @return Boolean
     */
    Boolean saveNotice(NoticePetitionVO noticeVO);

    /**
     * 保存后台公告信息
     *
     * @param noticeVO 公告信息
     * @return Boolean
     */
    Boolean adminSaveNotice(NoticePetitionVO noticeVO);

    /**
     * 删除公告提交签呈
     *
     * @param noticePetitionVO 公告信息
     * @return Boolean
     */
    Boolean deleteNoticePetition(NoticePetitionVO noticePetitionVO);

    /**
     * 查询前台公告列表信息
     *
     * @param noticeVO
     * @return Object[]
     */
    Object[] getMemberNotice(BdNoticeVO noticeVO);

    /**
     * 查询后台公告列表信息
     *
     * @param noticeVO
     * @return Object[]
     */
    Object[] getAdminNotice(BdNoticeVO noticeVO);

    /**
     * 后台首页显示
     *
     * @param noticeVO 参数
     * @return List<BdNotice>
     */
    Object[] getAdminIndexNotice(BdNoticeVO noticeVO);

    /**
     * 首页显示公告、站内信
     *
     * @param noticeVO 参数
     * @return List<BdNoticeVO>
     */
    Object[] showIndexNotice(BdNoticeVO noticeVO);

    /**
     * 会员端弹窗显示
     *
     * @param noticeVO 参数
     * @return List<BdNoticeVO>
     */
    List<BdNoticeVO> showIndexPopScreen(BdNoticeVO noticeVO);

    /**
     * 显示公告、站内信详情
     *
     * @param pkId ID
     * @return BdNoticeVO
     */
    BdNoticeVO showIndexNoticeDetail(Long pkId, Integer pkCountry, Long pkMember);

    /**
     * 管理端显示公告、站内信详情
     *
     * @param pkId ID
     * @return BdNoticeVO
     */
    BdNoticeVO showNoticeDetail(Long pkId);

    /**
     * 获取等级的翻译KEY值
     **/
    Integer getGradeTranslateValue(Integer pkId, Map<Integer, BdGrade> gradeMap);

    /**
     * 获取奖衔的翻译KEY值
     **/
    Integer getAwardsTranslateValue(Integer pkId, Map<Integer, BdAwards> awardsMap);

    /**
     * 公告签呈显示
     *
     * @param bdNoticeVO 公告信息
     * @return BdNoticeVO
     */
    BdNoticeVO showNoticePetition(BdNoticeVO bdNoticeVO);

    /**
     * 根据批次更新公告信息
     *
     * @param notice 公告信息
     * @return Integer
     */
    Integer updateNoticeByBatch(BdNotice notice);

    /**
     * 根据ID删除公告信息
     *
     * @param pkId     公告ID
     * @param updateId 修改人ID
     * @return Boolean
     */
    Boolean deleteNoticeById(Long pkId, Long updateId);

    /**
     * 后台公告显示
     *
     * @param pkCountry 国家ID
     * @return List<BdNoticeExt>
     */
    Object[] selectAdminNotice(Integer pkCountry);

    /**
     * 会员首页公告、站内信总条数
     *
     * @param noticeVO 参数
     * @return Integer
     */
    Integer showIndexNoticeCount(BdNoticeVO noticeVO);

    /**
     * 会员首页站内信的未读条数
     *
     * @param noticeVO 参数
     * @return Integer
     */
    Integer showIndexMailCount(BdNoticeVO noticeVO);

    /**
     * 后台根据角色弹窗显示
     *
     * @param noticeVO 参数
     * @return List<BdNoticeVO>
     */
    List<BdNotice> selectAdminNoticeByRole(BdNoticeVO noticeVO);

    /**
     * 根据ID上移记录
     *
     * @param pkId       ID
     * @param sort       排序值
     * @param pkModified 修改人
     * @return Integer
     */
    Integer upMove(Long pkId, Long sort, Long pkModified, Integer pkCountry);

    /**
     * 根据ID下移记录
     *
     * @param pkId       ID
     * @param sort       排序值
     * @param pkModified 修改人
     * @return Integer
     */
    Integer downMove(Long pkId, Long sort, Long pkModified, Integer pkCountry);

    /**
     * 根据ID置顶
     *
     * @param pkId       ID
     * @param sort       排序值
     * @param pkModified 修改人
     * @return Integer
     */
    Integer top(Long pkId, Long sort, Long pkModified);

    /**
     * 根据ID取消置顶
     *
     * @param pkId       ID
     * @param sort       排序值
     * @param pkModified 修改人
     * @return Integer
     */
    Integer cancelTop(Long pkId, Long sort, Long pkModified);

    /**
     * 保存会员站内信
     *
     * @param noticeVO VO
     * @return Boolean
     */
    Boolean saveMemberNotice(BdNoticeVO noticeVO);

    /**
     * 查询首页会员站内信弹窗
     *
     * @param pkMember  会员ID
     * @param pkCountry 国家ID
     * @return List<BdNoticeExt>
     */
    List<BdNoticeExt> indexMailPopScreen(Long pkMember, Integer pkCountry);

}
