syntax = "proto2";

package ts.proto.license;

enum BlacklistState {
    VALID                           = 0;
    SUSPICIOUS                      = 1;
    BLACKLISTED                     = 2;
}

message Blacklist {
    required BlacklistState state   = 1;
    optional string reason          = 2;
}


message LicenseInfo {
    required bytes  key             = 1;
    required string username        = 2;
    required string first_name      = 3;
    required string last_name       = 4;
    required string email           = 5;
    required int32  type            = 6;
    required int64  begin           = 7;
    required int64  end             = 8;
    required int64  created         = 9;

    reserved
        10, //music_limit
        11; //speach_limit
}

message ServerInfo {
    required string version         = 1;
    required string uname           = 2;
    required int64  timestamp       = 3;
    optional string unique_id       = 4;
}

message ServerValidation {
    required bool licensed          = 1;
    required bool license_info      = 2;
    optional bytes license          = 3;
    optional ServerInfo info        = 4; //Change somewhen to required but its currently for lagacy support
}

message LicenseResponse {
    required bool valid                 = 1; //If set the license is valid. The blacklist field could still be active. If the flag is false then the blacklist will container the message
    required Blacklist blacklist        = 2;
    optional LicenseInfo license_info   = 3; //Only availible when ServerValidation::license_info = true
}

message PropertyUpdateRequest {
    required int64 speach_total         = 1;
    required int64 speach_dead          = 2;
    required int64 speach_online        = 3;
    required int64 speach_varianz       = 4;

    required int64 clients_online       = 7;
    required int64 web_clients_online   = 8;
    required int64 bots_online          = 9;
    required int64 queries_online       = 10;
    required int64 servers_online       = 11;
}

message PropertyUpdateResponse {
    required bool accepted                      = 1;
    required int64 speach_total_remote          = 2;
    required int64 speach_varianz_corrector     = 3;

    optional bool reset_speach                  = 4;
}