export interface CommandContext {
  channel: string;
  senderId: string;
  sessionId: string;
  rawInput: string;
  services?: CommandServices;
}

export interface CommandResult {
  handled: boolean;
  text: string;
}

export interface CommandDefinition {
  name: string;
  aliases?: string[];
  description: string;
  execute: (args: string[], ctx: CommandContext) => Promise<CommandResult>;
}

export interface CommandServices {
  getStatus?: () => Promise<string> | string;
  getUsage?: () => Promise<string> | string;
  getModel?: () => Promise<string> | string;
  setModel?: (tier: string) => Promise<string> | string;
  compact?: () => Promise<string> | string;
  reset?: () => Promise<string> | string;

  getElevation?: () => Promise<string> | string;
  setElevation?: (input: string) => Promise<string> | string;
}
