package com.lesingle.creation.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lesingle.creation.dto.work.*;
import com.lesingle.creation.vo.work.WorkStatsVO;
import com.lesingle.creation.vo.work.WorkVO;

import java.util.List;

/**
 * 竞赛作品服务接口
 */
public interface ContestWorkService {

    /**
     * 提交作品
     * @param dto 提交作品请求
     * @param tenantId 租户 ID
     * @param submitterUserId 提交人 ID
     * @return 作品详情
     */
    WorkVO submit(SubmitWorkDTO dto, Long tenantId, Long submitterUserId);

    /**
     * 作品统计
     * @param contestId 活动 ID（可选）
     * @return 统计数据
     */
    WorkStatsVO getStats(Long contestId);

    /**
     * 分页查询作品列表
     * @param queryDTO 查询参数
     * @param tenantId 租户 ID
     * @return 作品列表
     */
    Page<WorkVO> pageQuery(WorkQueryDTO queryDTO, Long tenantId);

    /**
     * 获取作品详情
     * @param id 作品 ID
     * @param tenantId 租户 ID
     * @return 作品详情
     */
    WorkVO getDetail(Long id, Long tenantId);

    /**
     * 退回作品
     * @param id 作品 ID
     * @param tenantId 租户 ID
     * @param reason 退回原因
     * @return 作品详情
     */
    WorkVO returnWork(Long id, Long tenantId, String reason);

    /**
     * 删除作品
     * @param id 作品 ID
     * @param tenantId 租户 ID
     */
    void delete(Long id, Long tenantId);

    /**
     * 查询某报名的所有作品
     * @param registrationId 报名 ID
     * @param tenantId 租户 ID
     * @return 作品列表
     */
    List<WorkVO> listByRegistration(Long registrationId, Long tenantId);

    /**
     * 查询某报名的所有作品版本
     * @param registrationId 报名 ID
     * @param tenantId 租户 ID
     * @return 作品版本列表
     */
    List<WorkVO> getVersionsByRegistration(Long registrationId, Long tenantId);

    /**
     * 查询教师指导的作品列表
     * @param queryDTO 查询参数
     * @param userId 教师用户 ID
     * @param tenantId 租户 ID
     * @return 作品列表分页数据
     */
    Page<WorkVO> getGuidedWorks(WorkQueryDTO queryDTO, Long userId, Long tenantId);
}
