// Extracted from: Spotify 1.1.61.583 (Windows)

syntax = "proto3";

package spotify.player.esperanto.proto;

import "es_restrictions.proto";
import "es_play_origin.proto";
import "es_optional.proto";
import "es_provided_track.proto";
import "es_context_player_options.proto";
import "es_prepare_play_options.proto";

option objc_class_prefix = "ESP";
option optimize_for = CODE_SIZE;
option java_package = "com.spotify.player.esperanto.proto";

message ContextIndex {
    uint64 page = 1;
    uint64 track = 2;
}

message PlaybackQuality {
    BitrateLevel bitrate_level = 1;
    enum BitrateLevel {
        UNKNOWN = 0;
        LOW = 1;
        NORMAL = 2;
        HIGH = 3;
        VERY_HIGH = 4;
        HIFI = 5;
    }
    
    BitrateStrategy strategy = 2;
    enum BitrateStrategy {
        UNKNOWN_STRATEGY = 0;
        BEST_MATCHING = 1;
        BACKEND_ADVISED = 2;
        OFFLINED_FILE = 3;
        CACHED_FILE = 4;
        LOCAL_FILE = 5;
    }
    
    BitrateLevel target_bitrate_level = 3;
    bool target_bitrate_available = 4;
    
    HiFiStatus hifi_status = 5;
    enum HiFiStatus {
        NONE = 0;
        OFF = 1;
        ON = 2;
    }
}

message ContextPlayerState {
    uint64 timestamp = 1;
    string context_uri = 2;
    string context_url = 3;
    Restrictions context_restrictions = 4;
    PlayOrigin play_origin = 5;
    ContextIndex index = 6;
    ProvidedTrack track = 7;
    bytes playback_id = 8;
    PlaybackQuality playback_quality = 9;
    OptionalDouble playback_speed = 10;
    OptionalInt64 position_as_of_timestamp = 11;
    OptionalInt64 duration = 12;
    bool is_playing = 13;
    bool is_paused = 14;
    bool is_buffering = 15;
    bool is_system_initiated = 16;
    ContextPlayerOptions options = 17;
    Restrictions restrictions = 18;
    repeated string suppressions = 19;
    repeated ProvidedTrack prev_tracks = 20;
    repeated ProvidedTrack next_tracks = 21;
    map<string, string> context_metadata = 22;
    map<string, string> page_metadata = 23;
    string session_id = 24;
    uint64 queue_revision = 25;
    PreparePlayOptions.AudioStream audio_stream = 26;
}
