// Extracted from: Spotify 1.1.73.517 (macOS)

syntax = "proto3";

package spotify.storage.esperanto.proto;

import "google/protobuf/empty.proto";

option objc_class_prefix = "ESP";
option java_package = "com.spotify.storage.esperanto.proto";

service Storage {
    rpc GetCacheSizeLimit(GetCacheSizeLimitParams) returns (CacheSizeLimit);
    rpc SetCacheSizeLimit(SetCacheSizeLimitParams) returns (google.protobuf.Empty);
    rpc DeleteExpiredItems(DeleteExpiredItemsParams) returns (google.protobuf.Empty);
    rpc DeleteUnlockedItems(DeleteUnlockedItemsParams) returns (google.protobuf.Empty);
    rpc GetStats(GetStatsParams) returns (Stats);
    rpc GetFileRanges(GetFileRangesParams) returns (FileRanges);
}

message CacheSizeLimit {
    int64 size = 1;
}

message GetCacheSizeLimitParams {
    
}

message SetCacheSizeLimitParams {
    CacheSizeLimit limit = 1;
}

message DeleteExpiredItemsParams {
    
}

message DeleteUnlockedItemsParams {
    
}

message RealmStats {
    Realm realm = 1;
    int64 size = 2;
    int64 num_entries = 3;
    int64 num_complete_entries = 4;
}

message Stats {
    string cache_id = 1;
    int64 creation_date_sec = 2;
    int64 max_cache_size = 3;
    int64 current_size = 4;
    int64 current_locked_size = 5;
    int64 free_space = 6;
    int64 total_space = 7;
    int64 current_numfiles = 8;
    repeated RealmStats realm_stats = 9;
}

message GetStatsParams {
    
}

message FileRanges {
    bool byte_size_known = 1;
    uint64 byte_size = 2;
    
    repeated Range ranges = 3;
    message Range {
        uint64 from_byte = 1;
        uint64 to_byte = 2;
    }
}

message GetFileRangesParams {
    Realm realm = 1;
    string file_id = 2;
}

enum Realm {
    STREAM = 0;
    COVER_ART = 1;
    PLAYLIST = 4;
    AUDIO_SHOW = 5;
    HEAD_FILES = 7;
    EXTERNAL_AUDIO_SHOW = 8;
    KARAOKE_MASK = 9;
}
