package com.cool.store.service.tp;

import com.cool.store.entity.tp.TpApplyFormDO;
import com.cool.store.request.tp.*;
import com.cool.store.response.AuditInfoResponse;
import com.cool.store.vo.tp.*;
import com.cool.store.vo.tp.mini.MiniTpApplyListVO;
import com.cool.store.vo.tp.mini.MiniTpPenaltyApplyVO;
import com.cool.store.vo.tp.mini.MiniTpRewardApplyVO;
import com.cool.store.vo.tp.mini.MiniTpRuleListVO;
import com.github.pagehelper.PageInfo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * <p>
 * 十二分制-申请单 服务类
 * </p>
 *
 * @author wangff
 * @since 2025/11/5
 */
public interface TpApplyService {

    /**
     * 加分申请提交
     * @param request 奖惩申请Request
     * @return 是否成功
     */
    Boolean rewardApplySubmit(TpApplyRequest request);

    /**
     * 加分申请单详情
     * @param applyId 申请单id
     * @return 加分申请详情VO
     */
    TpRewardApplyDetailVO rewardDetail(Long applyId);

    /**
     * 加分申请单分页查询
     * @param request 申请单查询Request
     * @return 加分申请单VO列表
     */
    PageInfo<TpRewardApplyListVO> rewardPage(TpApplyQueryRequest request);

    /**
     * 扣分申请提交
     * @param request 奖惩申请Request
     * @return 是否成功
     */
    Boolean penaltyApplySubmit(TpApplyRequest request);

    /**
     * 惩处申请单详情
     * @param applyId 申请单id
     * @return 惩处申请详情VO
     */
    TpPenaltyApplyDetailVO penaltyDetail(Long applyId);

    /**
     * 惩处申请单分页查询
     * @param request 申请单查询Request
     * @return 惩处申请单列表VO列表
     */
    PageInfo<TpPenaltyApplyListVO> penaltyPage(TpApplyQueryRequest request);

    /**
     * 加分申请审批
     * @param request 申请单审批Request
     * @return 是否成功
     */
    Boolean rewardAudit(TpApplyAuditRequest request);

    /**
     * 惩处申请审批
     * @param request 申请单审批Request
     * @return 是否成功
     */
    Boolean penaltyAudit(TpApplyAuditRequest request);

    /**
     * 复议申请提交
     * @param request 复议申请Request
     * @return 是否成功
     */
    Boolean appealApplySubmit(TpAppealApplyRequest request);

    /**
     * 复议申请单详情
     * @param applyId 复议申请单id
     * @return 复议申请单详情VO
     */
    TpAppealFormDetailVO appealDetail(Long applyId);

    /**
     * 复议申请单分页查询
     * @param request 申请单查询Request
     * @return 复审列表VO列表
     */
    PageInfo<TpAppealListVO> appealPage(TpApplyQueryRequest request);

    /**
     * 复议申请审批
     * @param request 申请单审批Request
     * @return 是否成功
     */
    Boolean appealAudit(TpApplyAuditRequest request);

    /**
     * 批量删除申请单
     * @param applyIds 申请单id列表
     * @return 是否成功
     */
    Boolean deleteBatch(List<Long> applyIds);

    /**
     * 获取审批列表
     * @param applyId 申请单id
     * @return 审批记录列表
     */
    List<AuditInfoResponse> getAuditRecordList(Long applyId);

    /**
     * Mini获取申请单列表
     * @param request 申请单查询Request
     * @return Mini申请单列表VO列表
     */
    PageInfo<MiniTpApplyListVO> getMiniApplyList(TpApplyQueryRequest request);

    /**
     * Mini获取加分申请单详情
     * @param applyId 申请单id
     * @return Mini加分申请单详情VO
     */
    MiniTpRewardApplyVO getMiniRewardApplyDetail(Long applyId);

    /**
     * Mini获取惩处申请单详情
     * @param applyId 申请单id
     * @return Mini惩处申请单详情VO
     */
    MiniTpPenaltyApplyVO getMiniPenaltyApplyDetail(Long applyId);

    /**
     * Mini规则分页查询
     * @param request 规则查询Request
     * @return Mini奖惩规则列表VO列表
     */
    PageInfo<MiniTpRuleListVO> getMiniRulePage(TpRuleQueryRequest request);

    /**
     * 认罚缴款
     * @param applyId 惩处申请单id
     * @return java.lang.Boolean
     */
    Boolean acceptPenalty(Long applyId);

    /**
     * 复议逾期
     * @param applyId 惩处申请单id
     */
    void appealOverdue(Long applyId);

    /**
     * 完成缴费
     * @param applyId 惩处申请单id
     * @return 是否成功
     */
    Boolean completePayment(Long applyId);

    /**
     * 撤销复议申请
     * @param applyId 复议申请id
     * @return 是否成功
     */
    Boolean withdrawAppeal(Long applyId);

    /**
     * 积分变动
     * @param formDO 申请单DO
     */
    void scoreChange(TpApplyFormDO formDO);

    /**
     * 惩处申请单Excel导入（异步执行，立即返回）
     *
     * @param file Excel 文件
     */
    Boolean penaltyImport(MultipartFile file);

    /**
     * 门店积分
     * @param storeId 门店id
     * @return 积分
     */
    TpStoreScoreVO getStoreScore(String storeId);

    /**
     * 批量审批
     * @param request 申请单批量审批Request
     * @return 申请单批量审批结果VO列表
     */
    List<TpBatchAuditVO> batchAudit(TpBatchAuditRequest request);
}
