// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.modular;

using fuchsia.images;

enum SuggestionImageType {
  PERSON = 0;
  OTHER = 1;
};

enum AnnoyanceType {
  NONE = 0;

  // Tiny interruptions meant to be displayed and hidden quickly without user
  // interaction. Analogous to toasts. They won't reach the next space when
  // ignored or missed.
  PEEK = 1;

  // Interruptions meant to be displayed to the user. The user could accept or
  // dismiss them. They are placed in the Next space when ignored or missed.
  // Analogous to notifications.
  INTERRUPT = 2;

  // Meant to show system errors or other extremely urgent alerts. It would
  // block the rest of the interface and force the user to interact with it.
  BLOCKING = 3;
};

// Information for the main image of the Suggestion.
struct SuggestionDisplayImage {
  // The image as a vmo.
  fuchsia.images.EncodedImage image;

  // Information about the content contained in the image
  SuggestionImageType image_type;
};

// TODO(thatguy): This will likely be a union eventually, with different
// display descriptions for different kinds of Suggestions.
struct SuggestionDisplay {
  // Title text for this Suggestion
  string headline;

  // Sub-headline text to be optionally displayed with this Suggestion
  string? subheadline;

  // A longer details string to be optionally displayed with this Suggestion
  string? details;

  // Color in which the Suggestion should be displayed
  // Format is 0xaarrggbb
  uint32 color;

  // Optional list of icons that can be displayed with the Suggestion
  vector<SuggestionDisplayImage>? icons;

  // Optional image to display as part of the Suggestion
  SuggestionDisplayImage? image;

  // How annoying should this suggestion be?
  AnnoyanceType annoyance;
};
