/**
 * Rendererプロセスから呼び出すMainプロセスのAPI
 */
export interface MainApi {
  /**
   * テキストファイルを保存します
   * @param file ファイルパス
   * @param contents テキスト
   * @return 成功したかどうか
   */
  saveTextFile(file: string, contents: string): Promise<boolean>;

  /**
   * テキストファイルを読み込みます
   * @param file ファイル名
   * @return テキスト
   */
  readTextFile(file: string): Promise<string | null>;
  /**
   * 一時プロジェクトディレクトリを作成する
   * @return プロジェクトディレクトリのパス
   */
  makeTmpProjectDirectory(): Promise<string>;

  /**
   * プロジェクトをビルドします
   * @param directory プロジェクトのディレクトリ
   * @return 出力ファイル名
   */
  build(directory: string): Promise<boolean>;

  /**
   * プロジェクトをマイコンに書き込みます
   * @param directory プロジェクトのディレクトリ
   * @param port 通信ポート
   */
  upload(directory: string, port: string): Promise<boolean>;

  /**
   * ポートの一覧を返します
   */
  getPorts(): Promise<Port[]>;

  /**
   * ファイルオープンダイアログを表示する
   */
  showOpenFileDialog(option: {
    title?: string;
    defaultPath?: string;
    filters?: { name: string; extensions: string[] }[];
  }): Promise<string | null>;

  /**
   * ファイルオープンダイアログを表示する
   */
  showSaveFileDialog(option: {
    title?: string;
    defaultPath?: string;
    filters?: { name: string; extensions: string[] }[];
  }): Promise<string | null>;
}

/**
 * PortInfoのシンプル版
 */
export interface Port {
  port: string;
  vendorId: string;
  productId: string;
}
