import { MeetingInfo } from '../meeting/meeting-info.js';
import { MembershipSource } from '../membership-source.js';
import { ChannelInfo } from './channel-info.js';
import { FeedbackLoop } from './feedback-loop.js';
import { NotificationInfo } from './notification-info.js';
import { OnBehalfOf } from './on-behalf-of.js';
import { ChannelDataSettings } from './settings.js';
import { TeamInfo } from './team-info.js';
import { TenantInfo } from './tenant-info.js';
import '../account.js';
import '../role.js';
import '../membership-source-types.js';
import '../membership-types.js';
import '../meeting/meeting-details.js';

/**
 *
 * An interface representing ChannelData.
 * Channel data specific to messages received in Microsoft Teams
 *
 */
type ChannelData = {
    /**
     * @member {ChannelInfo} [channel] Information about the channel in which the
     * message was sent.
     */
    channel?: ChannelInfo;
    /**
     * @member {string} [eventType] Type of event.
     */
    eventType?: unknown;
    /**
     * @member {TeamInfo} [team] Information about the team in which the message
     * was sent.
     */
    team?: TeamInfo;
    /**
     * @member {NotificationInfo} [notification] Notification settings for the
     * message.
     */
    notification?: NotificationInfo;
    /**
     * @member {TenantInfo} [tenant] Information about the tenant in which the
     * message was sent.
     */
    tenant?: TenantInfo;
    /**
     * @member {MeetingInfo} [meeting] Information about the tenant in which the
     * message was sent.
     */
    meeting?: MeetingInfo;
    /**
     * @member {ChannelDataSettings} [settings] Information about the settings in which the
     * message was sent.
     */
    settings?: ChannelDataSettings;
    /**
     * Legacy feedback loop flag. Setting this to `true` is equivalent to `feedbackLoop: { type: 'default' }`.
     * Prefer using `feedbackLoop` directly.
     */
    feedbackLoopEnabled?: boolean;
    /**
     * Feedback loop configuration.
     * Set `type` to `'custom'` to trigger a `message/fetchTask` invoke for a bot-provided task module dialog.
     * Set `type` to `'default'` for the standard Teams thumbs up/down UI.
     */
    feedbackLoop?: FeedbackLoop;
    /**
     * ID of the stream.
     * @remarks
     * Assigned after the initial update is sent.
     */
    streamId?: string;
    /**
     * The type of message being sent.
     * @remarks
     * `informative` - An informative update.
     * `streaming` - A chunk of partial message text.
     * `final` - The final message.
     */
    streamType?: 'informative' | 'streaming' | 'final';
    /**
     * Sequence number of the message in the stream.
     * @remarks
     * Starts at 1 for the first message and increments from there.
     */
    streamSequence?: number;
    /**
     * Information about the users on behalf of whom the action is performed.
     */
    onBehalfOf?: OnBehalfOf[];
    /**
     * List of teams that a channel was shared with.
     */
    sharedWithTeams?: TeamInfo[];
    /**
     * List of teams that a channel was unshared from.
     */
    unsharedFromTeams?: TeamInfo[];
    /**
     * Information about the source of a member that was added or removed from a shared channel.
     */
    membershipSource?: MembershipSource;
};

export { type ChannelData, ChannelDataSettings, ChannelInfo, FeedbackLoop, NotificationInfo, OnBehalfOf, TeamInfo, TenantInfo };
