package com.ruoyi.busi.service;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.busi.domain.BusiNotice;
import com.ruoyi.busi.domain.BusiNoticeSign;
import com.ruoyi.busi.query.AppNoticeQuery;
import com.ruoyi.busi.query.BusiNoticeQuery;
import com.ruoyi.busi.vo.BusiNoticeVo;

import java.util.List;

/**
 * 通告Service接口
 *
 * @author 朱春云
 * @date 2025-03-17
 */
public interface IBusiNoticeService extends IService<BusiNotice>
{


    /**
     * 查询博主报名的通告
     * @author PQZ
     * @date 11:05 2025/3/22
     * @param userId 博主id
     * @return java.util.List<com.ruoyi.busi.vo.BusiNoticeVo>
    **/
    IPage<BusiNoticeVo> queryListByUserId(Long userId,Page<BusiNotice> page);

    /**
     * 列表查询
     * @param query 查询参数
     * @param page 分页参数
     */
    IPage<BusiNoticeVo> queryListPage(BusiNoticeQuery query, Page<BusiNotice> page);
    /**
     * 保存
     * @param data 保存参数
     */
    JSONObject saveVo(BusiNotice data) throws Exception;
    /**
     * 更新
     * @param data 保存参数
     */
    JSONObject updateByIdVo(BusiNotice data) throws Exception;
    JSONObject saveOrUpdateVo(BusiNotice data) throws Exception;
    void removeByIdsVo(List<String> ids);

    /**
     * 发布或者下架
     * @param noticeId 通告主键
     * @param publishTakeDown 1发布0下架
     */
    void publishTakeDown(String noticeId, String publishTakeDown);

    /**
     * 审核接口
     * @param query 审核参数
     */
    void auditInfo(BusiNoticeQuery query);

    /**
     * 小程序端查询通告列表
     * @author vinjor-M
     * @date 15:41 2025/3/25
     * @param query TODO
 * @param page TODO
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.ruoyi.busi.domain.BusiNotice>
    **/
    IPage<BusiNoticeVo> queryAppListPage(AppNoticeQuery query, Page<BusiNotice> page);
    /**
     * 小程序端查询浏览通告列表
     * @author zcy
     * @date 15:39 2025/3/29
     * @param query 查询条件
     * @return com.ruoyi.common.core.domain.AjaxResult
     **/
    List<BusiNoticeVo> appFootprintList(AppNoticeQuery query);


    /**
     * 小程序端查询通告详细信息
     * @author 朱春云
     * @date 15:39 2025/3/29
     * @param noticeId 通告id
     * @return JSONObject
     **/
    JSONObject appGetDetail(String noticeId);

    IPage<BusiNoticeVo> subscribeList(AppNoticeQuery query, Page<BusiNotice> page);

    IPage<BusiNoticeVo> loveList(AppNoticeQuery query, Page<BusiNotice> page);

    IPage<BusiNoticeVo> myNoticeList(AppNoticeQuery query, Page<BusiNotice> page);

    IPage<BusiNoticeVo> myPublishNoticeList(AppNoticeQuery query, Page<BusiNotice> page);
    IPage<BusiNoticeSign> reportList(AppNoticeQuery query, Page<BusiNoticeSign> page);
    JSONObject reportNum(AppNoticeQuery query);






}
