/**
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 * <p>
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is
 * regenerated.
 */

package com.microsoft.bot.connector.teams;

import com.microsoft.bot.schema.teams.ConversationList;
import com.microsoft.bot.schema.teams.MeetingInfo;
import com.microsoft.bot.schema.teams.TeamDetails;

import com.microsoft.bot.schema.teams.TeamsMeetingParticipant;
import java.util.concurrent.CompletableFuture;

/**
 * Teams operations.
 */
public interface TeamsOperations {
    /**
     * Fetches channel list for a given team.
     * 
     * @param teamId The team id.
     * @return A ConversationList object.
     */
    CompletableFuture<ConversationList> fetchChannelList(String teamId);

    /**
     * Fetches details related to a team.
     * 
     * @param teamId The team id.
     * @return The TeamDetails
     */
    CompletableFuture<TeamDetails> fetchTeamDetails(String teamId);

    /**
     * Fetches Teams meeting participant details.
     * @param meetingId Teams meeting id
     * @param participantId Teams meeting participant id
     * @param tenantId Teams meeting tenant id
     * @return TeamsMeetingParticipant
     */
    CompletableFuture<TeamsMeetingParticipant> fetchParticipant(
        String meetingId,
        String participantId,
        String tenantId
    );

    /**
     * Fetches information related to a Teams meeting.
     * @param meetingId Meeting Id.
     * @return The details related to a team.
     */
    default CompletableFuture<MeetingInfo> fetchMeetingInfo(String meetingId) {
        CompletableFuture<MeetingInfo> result = new CompletableFuture<>();
        result.completeExceptionally(new Exception("fetchMeetingInfo not implemented"));
        return result;
    }
}
