syntax = "proto3";

package io.delphiplatform.api.v3.proto;

message AppleMusicAggregation {
  message AppleAgeBands {
    uint64 all_0_17 = 29;
    uint64 all_18_24 = 1;
    uint64 all_25_34 = 2;
    uint64 all_35_44 = 3;
    uint64 all_45_54 = 4;
    uint64 all_55_64 = 5;
    uint64 all_65_plus = 6;
    uint64 all_unknown = 7;
    uint64 female_0_17 = 30;
    uint64 female_18_24 = 8;
    uint64 female_25_34 = 9;
    uint64 female_35_44 = 10;
    uint64 female_45_54 = 11;
    uint64 female_55_64 = 12;
    uint64 female_65_plus = 13;
    uint64 female_unknown = 14;
    uint64 male_0_17 = 31;
    uint64 male_18_24 = 15;
    uint64 male_25_34 = 16;
    uint64 male_35_44 = 17;
    uint64 male_45_54 = 18;
    uint64 male_55_64 = 19;
    uint64 male_65_plus = 20;
    uint64 male_unknown = 21;
    uint64 unknown_0_17 = 32;
    uint64 unknown_18_24 = 22;
    uint64 unknown_25_34 = 23;
    uint64 unknown_35_44 = 24;
    uint64 unknown_45_54 = 25;
    uint64 unknown_55_64 = 26;
    uint64 unknown_65_plus = 27;
    uint64 unknown_unknown = 28;
  }

  message AppleGenders {
    uint64 female = 1;
    uint64 male = 2;
    uint64 unknown = 3;
  }

  message Source {
    uint64 library = 1;
    uint64 search = 2;
    uint64 discovery = 3;
    uint64 music_kit = 4;
    uint64 external = 5;
    uint64 now_playing = 6;
    uint64 voice = 7;
    uint64 other = 8;
  }

  message ContainerType {
    uint64 single_track = 1;
    uint64 radio = 2;
    uint64 playlist = 3;
    uint64 album = 4;
  }

  message ContainerSubType {
    uint64 not_applicable = 1;
    uint64 private_user_playlist = 2;
    uint64 editorial_playlist = 3;
    uint64 artist_playlist = 4;
    uint64 curator_playlist = 5;
    uint64 seeded_by_artist_song = 6;
    uint64 format_station = 7;
    uint64 editorial_station = 8;
    uint64 personal_mix_playlist = 9;
    uint64 new_music_mix = 10;
    uint64 favorites_mix = 11;
    uint64 chill_mix = 12;
    uint64 get_up_mix = 13;
    uint64 friends_mix = 14;
    uint64 algorithm_station = 15;
    uint64 replay_mix = 16;
    uint64 auto_play_station = 17;
    uint64 charts_playlist = 18;
    uint64 artist_station = 19;
    uint64 personal_station = 20;
    uint64 album = 21;
  }

  message DeviceType {
    uint64 mobile = 1;
    uint64 desktop = 2;
    uint64 voice = 3;
    uint64 other = 4;
  }

  message Os {
    uint64 ios = 1;
    uint64 mac = 2;
    uint64 android = 3;
    uint64 windows = 4;
    uint64 tvos = 5;
    uint64 sonos = 6;
    uint64 other = 7;
  }

  message UserType {
    uint64 trial = 1;
    uint64 paid = 2;
  }

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

message AppleStreamStats {
  AppleMusicAggregation.AppleAgeBands apple_age_bands = 1;
  AppleMusicAggregation.AppleGenders genders = 2;
  AppleMusicAggregation.Source source = 3;
  AppleMusicAggregation.ContainerType container_type = 4;
  AppleMusicAggregation.ContainerSubType container_sub_type = 5;
  AppleMusicAggregation.DeviceType device_type = 6;
  AppleMusicAggregation.Os os = 7;
  AppleMusicAggregation.UserType user_type = 8;
  AppleMusicAggregation.ListenerEngagement listener_engagement = 9;


  uint64 offline_play = 10;
  uint64 completion_play = 11;
  uint64 skips = 12;
  uint64 streams = 13;
  uint64 non_royalty_streams = 14;
  uint64 listeners = 15;


}

message AppleCountryStats {
  map<string, AppleStreamStats> countries = 1;
}
