syntax = "proto3";

package com.sonymusic.delphi.etl.apps.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;
        uint64 unknown = 3;
    }

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

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;
}
