package org.hzhub.workflow.service;

import org.hzhub.common.mybatis.core.page.PageQuery;
import org.hzhub.common.mybatis.core.page.TableDataInfo;
import org.hzhub.workflow.domain.bo.WecomApprovalSubmitBo;
import org.hzhub.workflow.domain.vo.WecomApprovalVo;

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

/**
 * 企业微信审批服务
 *
 * @author hzhub
 */
public interface IWecomApprovalService {

    /**
     * 分页查询审批列表（默认按当前登录用户过滤）
     */
    TableDataInfo<WecomApprovalVo> listApprovals(String type, String status, String keyword, PageQuery pageQuery);

    /**
     * 获取审批详情
     */
    String getApprovalDetail(String spNo);

    /**
     * 发起审批申请
     */
    String submitApproval(WecomApprovalSubmitBo bo);

    /**
     * 异步全量同步近 N 天的审批数据（管理员使用）
     * <p>立即返回日志ID，前端轮询 /sync/logs 查看进度</p>
     *
     * @param daysBack 天数
     * @return 同步日志ID
     */
    Long syncAllApprovalsAsync(int daysBack);

    /**
     * 增量同步近 N 天的审批数据（定时任务使用）
     *
     * @param daysBack 天数
     * @return 同步结果描述
     */
    String incrementalSync(int daysBack);

    /**
     * 同步当前登录用户近 1 天的审批数据
     *
     * @return 同步结果描述
     */
    String syncCurrentUserApprovals();

    /**
     * 同步单个审批详情
     */
    void syncApprovalDetail(String spNo);

    /**
     * 同步模板配置
     */
    void syncTemplate(String templateId);

    /**
     * 同步所有审批模板（从企业微信拉取模板列表并逐个同步详情）
     */
    void syncAllTemplates();

    /**
     * 获取审批模板列表
     */
    List<Map<String, Object>> listTemplates();

    /**
     * 获取统计数据（当前用户范围）
     */
    Map<String, Long> getStats();

    /**
     * 获取当前用户统计数据（按发起人过滤）
     */
    Map<String, Long> getUserStats();

    /**
     * 查询同步日志（分页）
     */
    TableDataInfo<Map<String, Object>> listSyncLogs(PageQuery pageQuery);
}
