package com.cool.store.service.close;


import com.cool.store.enums.close.CloseStoreSubStageEnum;
import com.cool.store.request.close.store.*;
import com.cool.store.response.AuditInfoResponse;
import com.cool.store.vo.close.store.*;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * @Author suzhuhong
 * @Date 2025/9/23 15:48
 * @Version 1.0
 */
public interface CloseStoreService {


    /**
     * 申请闭店
     * @param request 闭店申请Request
     * @return 是否成功
     */
    Boolean applyCloseStore(CloseStoreApplyRequest request);

    /**
     * 拒绝之后 重新提交申请
     * @param request 闭店申请Request
     * @return 是否成功
     */
    Boolean reApplyCloseStore(ReCloseStoreApplyRequest request);

    /**
     * 第三方申请闭店
     * @param request 三方闭店申请Request
     * @return 是否成功
     */
    Boolean thirdApplyCloseStore(ThirdCloseStoreApplyRequest request);

    /**
     * 审批通过
     * @param request 闭店申请审批Request
     * @return 是否成功
     */
    Boolean auditPass(CloseStoreAuditRequest request);

    /**
     * 审批拒绝
     * @param request 闭店申请审批Request
     * @return 是否成功
     */
    Boolean auditReject(CloseStoreAuditRequest request);

    /**
     * 取消闭店申请
     * @param closeStoreId 闭店申请id
     * @return 是否成功
     */
    Boolean cancelApply(Long closeStoreId);

    /**
     * 查询权限下的闭店申请审批记录
     * @param request 闭店申请查询Request
     * @return 闭店申请记录列表VO列表
     */
    PageInfo<CloseStoreInfoListVO> closeStoreAuditList(CloseStoreQueryRequest request);

    /**
     * 查询闭店申请列表
     * @param request 闭店申请查询Request
     * @return 闭店申请记录列表VO列表
     */
    PageInfo<CloseStoreInfoListVO> closeStoreInfoList(CloseStoreQueryRequest request);

    /**
     * 查询闭店审批记录
     * @param closeStoreId 闭店申请id
     * @return 审批记录VO列表
     */
    List<AuditInfoResponse> getAuditRecordList(Long closeStoreId);

    /**
     * 获取闭店申请详情
     * @param closeStoreId 闭店申请id
     * @return 闭店申请详情VO
     */
    CloseStoreInfoDetailVO getCloseStoreInfoDetail(Long closeStoreId, Boolean queryAuditId);

    /**
     * 根据审批id获取闭店申请详情
     * @param closeStoreAuditId 审批id
     * @return 闭店申请详情VO
     */
    CloseStoreInfoDetailVO getCloseStoreInfoDetailByAuditId(Long closeStoreAuditId);

    /**
     * 闭店原因列表
     * @param closeType 闭店发起方式
     * @return 门店闭店原因VO
     */
    List<StoreCloseReasonVO> getStoreCloseReasonList(Integer closeType);

    /**
     * 获取闭店申请简单信息
     * @param closeStoreId 闭店申请id
     * 闭店申请简单信息VO
     */
    CloseStoreSimpleVO getCloseStoreSimpleInfo(Long closeStoreId);

    /**
     * mini分页查询
     * @param request 查询参数
     * @return mini闭店申请简单信息VO
     */
    PageInfo<MiniCloseStoreSimpleVO> getMiniCloseStoreSimpleInfoList(MiniCloseStoreQueryRequest request);

    /**
     * 获取闭店状态列表
     * @return 闭店状态列表
     */
    List<CloseStoreStatusVO> getCloseStoreStatusList();

    /**
     * 闭店流程流转
     * @param closeStoreId 闭店申请id
     * @param currentStage 当前阶段
     */
    void closeStoreProcessFlow(Long closeStoreId, CloseStoreSubStageEnum currentStage);
}
