/**
 * Chat Provider Interface
 *
 * Defines the contract for chat platform integrations (Discord, Slack, Matrix, etc.)
 */

export interface ChatMessage {
  id: string;
  channelId: string;
  authorId: string;
  authorName: string;
  content: string;
  timestamp: Date;
  threadId?: string;
}

export interface ChatCommand {
  command: string;
  args: string[];
  message: ChatMessage;
}

export interface ThreadCreateOptions {
  channelId: string;
  name: string;
  message: string;
}

export interface ThreadMessageOptions {
  threadId: string;
  channelId: string;
  content: string;
}

export interface VerbosityLevel {
  level: "low" | "medium" | "high";
  description: string;
}

/**
 * Chat Provider Interface
 *
 * All chat platform integrations must implement this interface
 */
export interface IChatProvider {
  /**
   * Connect to the chat platform
   */
  connect(): Promise<void>;

  /**
   * Disconnect from the chat platform
   */
  disconnect(): Promise<void>;

  /**
   * Check if the provider is connected
   */
  isConnected(): boolean;

  /**
   * Send a message to a channel or thread
   */
  sendMessage(channelId: string, content: string): Promise<void>;

  /**
   * Create a thread for job updates
   */
  createThread(options: ThreadCreateOptions): Promise<string>;

  /**
   * Send a message to a thread
   */
  sendThreadMessage(options: ThreadMessageOptions): Promise<void>;

  /**
   * Parse a command from a message
   */
  parseCommand(message: ChatMessage): ChatCommand | null;

  /**
   * Edit an existing message in a channel.
   *
   * Optional method for providers that support message editing
   * (e.g., Matrix via m.replace, Discord via message.edit).
   * Used for streaming AI responses with incremental updates.
   *
   * @param channelId - The channel/room ID
   * @param messageId - The original message/event ID to edit
   * @param content - The updated message content
   */
  editMessage?(channelId: string, messageId: string, content: string): Promise<void>;
}
