package com.dora.service;

import com.dora.dto.AdminPlazaAuditDto.*;

/**
 * 广场作品审核服务接口
 */
public interface AdminPlazaAuditService {

    /**
     * 查询待审核作品列表
     *
     * @param request 查询请求
     * @return 待审核作品列表
     */
    PendingWorksListResponse getPendingWorks(PendingWorksQueryRequest request);

    /**
     * 查询待审核作品详情
     *
     * @param workNo 作品编号
     * @return 作品详情
     */
    PendingWorkDetailResponse getPendingWorkDetail(String workNo);

    /**
     * 审核作品
     *
     * @param request 审核请求
     * @param adminId 审核管理员ID
     * @param adminName 审核管理员名称
     * @return 审核结果
     */
    AuditResultResponse auditWork(AuditWorkRequest request, Long adminId, String adminName);

    /**
     * 批量审核作品
     *
     * @param workNos 作品编号列表
     * @param auditStatus 审核状态
     * @param auditRemark 审核备注
     * @param adminId 审核管理员ID
     * @param adminName 审核管理员名称
     * @return 审核成功数量
     */
    int batchAuditWorks(java.util.List<String> workNos, String auditStatus, String auditRemark, Long adminId, String adminName);

    /**
     * 获取审核统计数据
     *
     * @return 统计数据
     */
    AuditStatsResponse getAuditStats();

    /**
     * 查询审核历史记录
     *
     * @param request 查询请求
     * @return 审核历史列表
     */
    java.util.List<AuditHistoryRecord> getAuditHistory(AuditHistoryQueryRequest request);

    /**
     * 撤销审核（重新设为待审核状态）
     *
     * @param workNo 作品编号
     * @param reason 撤销原因
     * @param adminId 操作管理员ID
     * @param adminName 操作管理员名称
     * @return 操作结果
     */
    AuditResultResponse revokeAudit(String workNo, String reason, Long adminId, String adminName);

    /**
     * 快捷审核（批量通过最早的N个待审核作品）
     *
     * @param count 数量
     * @param taskType 任务类型（可选）
     * @param adminId 审核管理员ID
     * @param adminName 审核管理员名称
     * @return 审核成功数量
     */
    int quickApprove(int count, String taskType, Long adminId, String adminName);

    /**
     * 获取作品详细审核信息（含历史记录）
     *
     * @param workNo 作品编号
     * @return 详细审核信息
     */
    WorkAuditDetailResponse getWorkAuditDetail(String workNo);

    /**
     * 获取审核员工作量统计
     *
     * @param adminId 审核员ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 统计数据
     */
    AdminWorkloadStatsResponse getAdminWorkloadStats(Long adminId, String startTime, String endTime);
}

