syntax = "proto3";

package spotify.clienttoken.data.v0;

option java_multiple_files = true;
option optimize_for = CODE_SIZE;
option java_package = "spotify.clienttoken.data.v0";

message ConnectivitySdkData {
    PlatformSpecificData platform_specific_data = 1;
    string device_id = 2;
}

message PlatformSpecificData {
    oneof data {
        NativeAndroidData android = 1;
        NativeIOSData ios = 2;
        NativeDesktopMacOSData desktop_macos = 3;
        NativeDesktopWindowsData desktop_windows = 4;
        NativeDesktopLinuxData desktop_linux = 5;
    }
}

message NativeAndroidData {
    Screen screen_dimensions = 1;
    string android_version = 2;
    int32 api_version = 3;
    string device_name = 4;
    string model_str = 5;
    string vendor = 6;
    string vendor_2 = 7;
    int32 unknown_value_8 = 8;
}

message NativeIOSData {
    // https://developer.apple.com/documentation/uikit/uiuserinterfaceidiom
    int32 user_interface_idiom = 1;
    bool target_iphone_simulator = 2;
    string hw_machine = 3;
    string system_version = 4;
    string simulator_model_identifier = 5;
}

message NativeDesktopWindowsData {
    int32 os_version = 1;
    int32 os_build = 3;
    // https://docs.microsoft.com/en-us/dotnet/api/system.platformid?view=net-6.0
    int32 platform_id = 4;
    int32 unknown_value_5 = 5;
    int32 unknown_value_6 = 6;
    // https://docs.microsoft.com/en-us/dotnet/api/system.reflection.imagefilemachine?view=net-6.0
    int32 image_file_machine = 7;
    // https://docs.microsoft.com/en-us/dotnet/api/system.reflection.portableexecutable.machine?view=net-6.0
    int32 pe_machine = 8;
    bool unknown_value_10 = 10;
}

message NativeDesktopLinuxData {
    string system_name = 1;         //  uname -s
    string system_release = 2;      //  -r
    string system_version = 3;      //  -v
    string hardware = 4;            //  -i
}

message NativeDesktopMacOSData {
    string system_version = 1;
    string hw_model = 2;
    string compiled_cpu_type = 3;
}

message Screen {
    int32 width = 1;
    int32 height = 2;
    int32 density = 3;
    int32 unknown_value_4 = 4;
    int32 unknown_value_5 = 5;
}