package top.continew.admin.business.service;

import jakarta.servlet.http.HttpServletResponse;
import top.continew.admin.business.model.entity.SignInDO;
import top.continew.admin.business.model.query.SignInQuery;
import top.continew.admin.business.model.req.SignInAddReq;
import top.continew.admin.business.model.req.SignInEditReq;
import top.continew.admin.business.model.resp.SignInResp;
import top.continew.starter.data.mp.service.IService;
import top.continew.starter.extension.crud.model.query.PageQuery;
import top.continew.starter.extension.crud.model.query.SortQuery;
import top.continew.starter.extension.crud.model.resp.PageResp;
import java.util.List;

/**
 * 签到业务接口
 *
 * @author jiay
 * @since 2025/06/26 10:24
 */
public interface SignInService extends IService<SignInDO> {

    /**
     * 获取签到列表
     *
     * @param query 签到查询条件
     * @return 签到列表
     */
    List<SignInResp> getSignInList(SignInQuery query);

    /**
     * 添加签到
     *
     * @param req 签到
     * @return url
     */
    boolean addSignIn(SignInAddReq req);

    /**
     * 添加签到
     *
     * @param req 签到
     * @return 添加是否成功
     */
    boolean editSignIn(SignInEditReq req);

    /**
     * 添加签到
     *
     * @param id 签到id
     * @return 添加是否成功
     */
    boolean deleteSignIn(Long id);

    /**
     * 添加签到
     *
     * @param id 签到id
     * @return 签到
     */
    SignInResp getSignIn(Long id);

    /**
     * 添加签到
     *
     * @param query     签到查询条件
     * @param pageQuery 分页参数
     * @return 签到分页列表
     */
    PageResp<SignInResp> getSignInPage(SignInQuery query, PageQuery pageQuery);

    /**
     * 查询今日未签到列表
     *
     * @param query 签到查询条件
     * @return 今日未签到列表
     */
    List<SignInResp> getTodayNosignInList(SignInQuery query);

    /**
     * 分页查询历史签到列表
     *
     * @param query     签到查询条件
     * @param pageQuery 分页参数
     * @return 签到分页列表
     */
    PageResp<SignInResp> getHisSignInList(SignInQuery query, PageQuery pageQuery);

    /**
     * 导出历史签到列表
     *
     * @param query     查询条件
     * @param sortQuery 排序参数
     * @param response  参数
     */
    void exportHisSignInList(SignInQuery query, SortQuery sortQuery, HttpServletResponse response);

    /**
     * 导出今日未签到列表
     *
     * @param query     查询条件
     * @param sortQuery 排序参数
     * @param response  参数
     */
    void exportTodayNosignInList(SignInQuery query, SortQuery sortQuery, HttpServletResponse response);
}