// This file is part of arduino-cli.
//
// Copyright 2020 ARDUINO SA (http://www.arduino.cc/)
//
// This software is released under the GNU General Public License version 3,
// which covers the main part of arduino-cli.
// The terms of this license can be found at:
// https://www.gnu.org/licenses/gpl-3.0.en.html
//
// You can be released from the requirements of the above licenses by purchasing
// a commercial license. Buying such a license is mandatory if you want to
// modify or otherwise use the software for commercial activities involving the
// Arduino software without disclosing the source code of your own applications.
// To purchase a commercial license, send an email to license@arduino.cc.

syntax = "proto3";

package cc.arduino.cli.commands.v1;

option go_package = "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1;commands";

message Instance {
  // The ID of the instance.
  int32 id = 1;
}

message DownloadProgress {
  // URL of the download.
  string url = 1;
  // The file being downloaded.
  string file = 2;
  // Total size of the file being downloaded.
  int64 total_size = 3;
  // Size of the downloaded portion of the file.
  int64 downloaded = 4;
  // Whether the download is complete.
  bool completed = 5;
}

message TaskProgress {
  // Description of the task.
  string name = 1;
  // Additional information about the task.
  string message = 2;
  // Whether the task is complete.
  bool completed = 3;
  // Amount in percent of the task completion (optional)
  float percent = 4;
}

message Programmer {
  string platform = 1;
  string id = 2;
  string name = 3;
}

message Platform {
  // Platform ID (e.g., `arduino:avr`).
  string id = 1;
  // Version of the platform.
  string installed = 2;
  // Newest available version of the platform.
  string latest = 3;
  // Name used to identify the platform to humans (e.g., "Arduino AVR Boards").
  string name = 4;
  // Maintainer of the platform's package.
  string maintainer = 5;
  // A URL provided by the author of the platform's package, intended to point
  // to their website.
  string website = 6;
  // Email of the maintainer of the platform's package.
  string email = 7;
  // List of boards provided by the platform. If the platform is installed,
  // this is the boards listed in the platform's boards.txt. If the platform is
  // not installed, this is an arbitrary list of board names provided by the
  // platform author for display and may not match boards.txt.
  repeated Board boards = 8;
  // If true this Platform has been installed manually in the user' sketchbook
  // hardware folder
  bool manually_installed = 9;
  // If true this Platform has been deprecated
  bool deprecated = 10;
  // Type of the platform.
  repeated string type = 11;
}

message InstalledPlatformReference {
  // Platform ID (e.g., `arduino:avr`).
  string id = 1;
  // Version of the platform.
  string version = 2;
  // Installation directory of the platform
  string install_dir = 3;
  // 3rd party platform URL
  string package_url = 4;
}

message Board {
  // Name used to identify the board to humans.
  string name = 1;
  // Fully qualified board name used to identify the board to machines. The FQBN
  // is only available for installed boards.
  string fqbn = 2;
}

message Profile {
  // Name used to identify the profile within the sketch.
  string name = 1;
  // FQBN specified in the profile.
  string fqbn = 2;
}
