import { injectable } from "tsyringe";
import * as messages from "../../shared/messages";

export default interface ConsoleClient {
  showCommand(tabId: number, command: string): Promise<void>;

  showFind(tabId: number): Promise<void>;

  showInfo(tabId: number, message: string): Promise<void>;

  showError(tabId: number, message: string): Promise<void>;

  hide(tabId: number): Promise<void>;
}

@injectable()
export class ConsoleClientImpl implements ConsoleClient {
  showCommand(tabId: number, command: string): Promise<void> {
    return browser.tabs.sendMessage(tabId, {
      type: messages.CONSOLE_SHOW_COMMAND,
      command,
    });
  }

  showFind(tabId: number): Promise<void> {
    return browser.tabs.sendMessage(tabId, {
      type: messages.CONSOLE_SHOW_FIND,
    });
  }

  showInfo(tabId: number, message: string): Promise<void> {
    return browser.tabs.sendMessage(tabId, {
      type: messages.CONSOLE_SHOW_INFO,
      text: message,
    });
  }

  showError(tabId: number, message: string): Promise<void> {
    return browser.tabs.sendMessage(tabId, {
      type: messages.CONSOLE_SHOW_ERROR,
      text: message,
    });
  }

  hide(tabId: number): Promise<void> {
    return browser.tabs.sendMessage(tabId, {
      type: messages.CONSOLE_HIDE,
    });
  }
}