package com.lesingle.creation.service;

import com.lesingle.creation.dto.team.*;
import com.lesingle.creation.entity.ContestTeam;
import com.lesingle.creation.vo.team.TeamVO;

import java.util.List;

/**
 * 竞赛团队服务接口
 */
public interface ContestTeamService {

    /**
     * 创建团队
     * @param dto 创建团队请求
     * @param tenantId 租户 ID
     * @param creatorId 创建人 ID
     * @return 团队详情
     */
    TeamVO create(CreateTeamDTO dto, Long tenantId, Long creatorId);

    /**
     * 更新团队
     * @param id 团队 ID
     * @param dto 更新团队请求
     * @param tenantId 租户 ID
     * @return 团队详情
     */
    TeamVO update(Long id, UpdateTeamDTO dto, Long tenantId);

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

    /**
     * 获取团队详情
     * @param id 团队 ID
     * @param tenantId 租户 ID
     * @return 团队详情
     */
    TeamVO getDetail(Long id, Long tenantId);

    /**
     * 查询团队列表
     * @param contestId 活动 ID
     * @param tenantId 租户 ID
     * @return 团队列表
     */
    List<TeamVO> list(Long contestId, Long tenantId);

    /**
     * 按竞赛查询团队列表
     * @param contestId 活动 ID
     * @param tenantId 租户 ID
     * @return 团队列表
     */
    List<TeamVO> listByContest(Long contestId, Long tenantId);

    /**
     * 邀请成员
     * @param teamId 团队 ID
     * @param dto 邀请成员请求
     * @param tenantId 租户 ID
     * @param creatorId 创建人 ID
     */
    void inviteMember(Long teamId, InviteMemberDTO dto, Long tenantId, Long creatorId);

    /**
     * 移除成员
     * @param teamId 团队 ID
     * @param userId 成员用户 ID
     * @param tenantId 租户 ID
     */
    void removeMember(Long teamId, Long userId, Long tenantId);

    /**
     * 获取用户在某活动中的团队
     * @param contestId 活动 ID
     * @param userId 用户 ID
     * @return 团队信息
     */
    TeamVO getMyTeam(Long contestId, Long userId, Long tenantId);
}
