syntax = "proto3";

package io.delphiplatform.api.v3.proto;

message SpotifyAgeBand {
  uint64 all_0_17 = 1;
  uint64 all_18_22 = 2;
  uint64 all_23_27 = 3;
  uint64 all_28_34 = 4;
  uint64 all_35_44 = 5;
  uint64 all_45_59 = 6;
  uint64 all_60_150 = 7;
  uint64 all_unknown = 8;
  uint64 female_0_17 = 9;
  uint64 female_18_22 = 10;
  uint64 female_23_27 = 11;
  uint64 female_28_34 = 12;
  uint64 female_35_44 = 13;
  uint64 female_45_59 = 14;
  uint64 female_60_150 = 15;
  uint64 female_unknown = 16;
  uint64 male_0_17 = 17;
  uint64 male_18_22 = 18;
  uint64 male_23_27 = 19;
  uint64 male_28_34 = 20;
  uint64 male_35_44 = 21;
  uint64 male_45_59 = 22;
  uint64 male_60_150 = 23;
  uint64 male_unknown = 24;
  uint64 neutral_0_17 = 25;
  uint64 neutral_18_22 = 26;
  uint64 neutral_23_27 = 27;
  uint64 neutral_28_34 = 28;
  uint64 neutral_35_44 = 29;
  uint64 neutral_45_59 = 30;
  uint64 neutral_60_150 = 31;
  uint64 neutral_unknown = 32;
  uint64 unknown_0_17 = 33;
  uint64 unknown_18_22 = 34;
  uint64 unknown_23_27 = 35;
  uint64 unknown_28_34 = 36;
  uint64 unknown_35_44 = 37;
  uint64 unknown_45_59 = 38;
  uint64 unknown_60_150 = 39;
  uint64 unknown_unknown = 40;
}

message SpotifySource {
  uint64 album = 1;
  uint64 artist = 2;
  uint64 chart = 3;
  uint64 collection = 4;
  uint64 other = 5;
  uint64 others_playlist = 6;
  uint64 play_queue = 7;
  uint64 radio = 8;
  uint64 search = 9;
  uint64 daily_mix = 10;
  uint64 discover_weekly = 11;
  uint64 release_radar = 12;
}

message SpotifyDeviceType {
  uint64 builtin_car_application = 1;
  uint64 cell_phone = 2;
  uint64 connected_audio_device = 3;
  uint64 gaming_console = 4;
  uint64 other = 5;
  uint64 personal_computer = 6;
  uint64 smart_tv_device = 7;
  uint64 tablet = 8;
  uint64 wearable = 9;
}

message SpotifySaves {
  uint64 free = 1;
  uint64 premium = 2;
  uint64 total = 3;
}

message SpotifyOperatingSystem {
  uint64 android = 1;
  uint64 blackberry = 2;
  uint64 browser = 3;
  uint64 ios = 4;
  uint64 linux = 5;
  uint64 mac = 6;
  uint64 other = 7;
  uint64 windows = 8;
}

message SpotifyEngagement {
  uint64 lean_back = 1;
  uint64 lean_forward = 2;
}

message SpotifyGender {
  uint64 female = 1;
  uint64 male = 2;
  // ETL proto has "other" instead of "unknown" here
  uint64 unknown = 3;
  uint64 neutral = 4;
}

message SpotifyStreamStats {
  uint64 streams = 1;
  uint64 free_streams = 2;
  uint64 paid_streams = 3;
  uint64 repeat_play = 4;
  uint64 shuffle_play = 5;
  uint64 offline_play = 6;
  uint64 completion_play = 7;
  SpotifySource source = 8;
  SpotifyDeviceType device_type = 9;
  SpotifyOperatingSystem operating_system = 10;
  SpotifyEngagement engagement = 11;
  uint64 skips = 12;
  SpotifyAgeBand spotify_age_bands = 13;
  SpotifySaves saves = 14;
  SpotifyGender genders = 15;
}

message SpotifyCountryStats {
  map<string, SpotifyStreamStats> countries = 1;
}
