syntax = "proto2";

message PlaylistPublishedState {
    optional string uri = 0x1;
    optional int64 timestamp = 0x2;
}

message PlaylistTrackAddedState {
    optional string playlist_uri = 0x1;
    optional string track_uri = 0x2;
    optional int64 timestamp = 0x3;
}

message TrackFinishedPlayingState {
    optional string uri = 0x1;
    optional string context_uri = 0x2;
    optional int64 timestamp = 0x3;
    optional string referrer_uri = 0x4;
}

message FavoriteAppAddedState {
    optional string app_uri = 0x1;
    optional int64 timestamp = 0x2;
}

message TrackStartedPlayingState {
    optional string uri = 0x1;
    optional string context_uri = 0x2;
    optional int64 timestamp = 0x3;
    optional string referrer_uri = 0x4;
}

message UriSharedState {
    optional string uri = 0x1;
    optional string message = 0x2;
    optional int64 timestamp = 0x3;
}

message ArtistFollowedState {
    optional string uri = 0x1;
    optional string artist_name = 0x2;
    optional string artist_cover_uri = 0x3;
    optional int64 timestamp = 0x4;
}

message DeviceInformation {
    optional string os = 0x1;
    optional string type = 0x2;
}

message GenericPresenceState {
    optional int32 type = 0x1;
    optional int64 timestamp = 0x2;
    optional string item_uri = 0x3;
    optional string item_name = 0x4;
    optional string item_image = 0x5;
    optional string context_uri = 0x6;
    optional string context_name = 0x7;
    optional string context_image = 0x8;
    optional string referrer_uri = 0x9;
    optional string referrer_name = 0xa;
    optional string referrer_image = 0xb;
    optional string message = 0xc;
    optional DeviceInformation device_information = 0xd;
}

message State {
    optional int64 timestamp = 0x1;
    optional Type type = 0x2;
    enum Type {
        PLAYLIST_PUBLISHED = 0x1;
        PLAYLIST_TRACK_ADDED = 0x2;
        TRACK_FINISHED_PLAYING = 0x3;
        FAVORITE_APP_ADDED = 0x4;
        TRACK_STARTED_PLAYING = 0x5;
        URI_SHARED = 0x6;
        ARTIST_FOLLOWED = 0x7;
        GENERIC = 0xb;
    }
    optional string uri = 0x3;
    optional PlaylistPublishedState playlist_published = 0x4;
    optional PlaylistTrackAddedState playlist_track_added = 0x5;
    optional TrackFinishedPlayingState track_finished_playing = 0x6;
    optional FavoriteAppAddedState favorite_app_added = 0x7;
    optional TrackStartedPlayingState track_started_playing = 0x8;
    optional UriSharedState uri_shared = 0x9;
    optional ArtistFollowedState artist_followed = 0xa;
    optional GenericPresenceState generic = 0xb;
}

message StateList {
    repeated State states = 0x1;
}

