// 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;
};
