// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package google.actions.sdk.v2.interactionmodel.prompt;

import "google/actions/sdk/v2/interactionmodel/prompt/content/static_image_prompt.proto";
import "google/protobuf/duration.proto";

option go_package = "google.golang.org/genproto/googleapis/actions/sdk/v2/interactionmodel/prompt;prompt";
option java_multiple_files = true;
option java_outer_classname = "StaticMediaPromptProto";
option java_package = "com.google.actions.sdk.v2.interactionmodel.prompt";

// Contains information about the media, such as name, description, url, etc.
// Next id: 11
message StaticMediaPrompt {
  // Media type of this response.
  enum MediaType {
    // UNSPECIFIED value
    MEDIA_TYPE_UNSPECIFIED = 0;

    // Audio file.
    AUDIO = 1;

    // Response to acknowledge a media status report.
    MEDIA_STATUS_ACK = 2;
  }

  // Media control types the media response can supported optionally
  enum OptionalMediaControls {
    // Unspecified value
    OPTIONAL_MEDIA_CONTROLS_UNSPECIFIED = 0;

    // Paused event. Triggered when user pauses the media.
    PAUSED = 1;

    // Stopped event. Triggered when user exit out 3p session during media play.
    STOPPED = 2;
  }

  // The types of repeat mode for a list of media objects.
  enum RepeatMode {
    // Equivalent to OFF.
    REPEAT_MODE_UNSPECIFIED = 0;

    // End media session at the end of the last media object.
    OFF = 1;

    // Loop to the beginning of the first media object when the end of the last
    // media object is reached.
    ALL = 2;
  }

  // Media type of this response.
  MediaType media_type = 8;

  // Start offset of the first media object.
  google.protobuf.Duration start_offset = 5;

  // Optional media control types this media response session can support.
  // If set, request will be made to 3p when a certain media event happens.
  // If not set, 3p must still handle two default control type, FINISHED and
  // FAILED.
  repeated OptionalMediaControls optional_media_controls = 6;

  // List of media objects.
  repeated MediaObject media_objects = 7;

  // Repeat mode for the list of Media Objects.
  RepeatMode repeat_mode = 9;
}

// Represents a single media object.
message MediaObject {
  // Name of this media object.
  string name = 1;

  // Description of this media object.
  string description = 2;

  // The url pointing to the media content.
  string url = 3;

  // Image to show with the media card.
  MediaImage image = 4;
}

// Image to be shown inside a MediaPrompt.
message MediaImage {
  // Only one type of MediaImage is allowed.
  oneof image {
    // A large image, such as the cover of the album, etc.
    StaticImagePrompt large = 1;

    // A small image icon displayed on the right from the title.
    // It's resized to 36x36 dp.
    StaticImagePrompt icon = 2;
  }
}
