/**
 * Copyright (C) 2018 Open Whisper Systems
 *
 * Licensed according to the LICENSE file in this repository.
 */

syntax = "proto2";

package signal;

option java_package         = "org.thoughtcrime.securesms.backup";
option java_outer_classname = "BackupProtos";

message SqlStatement {
    message SqlParameter {
        optional string stringParamter   = 1;
        optional uint64 integerParameter = 2;
        optional double doubleParameter  = 3;
        optional bytes  blobParameter    = 4;
        optional bool   nullparameter    = 5;
    }

    optional string       statement  = 1;
    repeated SqlParameter parameters = 2;
}

message SharedPreference {
    optional string file             = 1;
    optional string key              = 2;
    optional string value            = 3;
    optional bool   booleanValue     = 4;
    repeated string stringSetValue   = 5;
    optional bool   isStringSetValue = 6;
}

message Attachment {
    optional uint64 rowId        = 1;
    optional uint64 attachmentId = 2;
    optional uint32 length       = 3;
}

message Sticker {
    optional uint64 rowId  = 1;
    optional uint32 length = 2;
}

message Avatar {
    optional string name        = 1;
    optional string recipientId = 3;
    optional uint32 length      = 2;
}

message DatabaseVersion {
    optional uint32 version = 1;
}

message Header {
    optional bytes iv   = 1;
    optional bytes salt = 2;
}

message KeyValue {
    optional string key          = 1;
    optional bytes  blobValue    = 2;
    optional bool   booleanValue = 3;
    optional float  floatValue   = 4;
    optional int32  integerValue = 5;
    optional int64  longValue    = 6;
    optional string stringValue  = 7;
}

message BackupFrame {
    optional Header           header     = 1;
    optional SqlStatement     statement  = 2;
    optional SharedPreference preference = 3;
    optional Attachment       attachment = 4;
    optional DatabaseVersion  version    = 5;
    optional bool             end        = 6;
    optional Avatar           avatar     = 7;
    optional Sticker          sticker    = 8;
    optional KeyValue         keyValue   = 9;
}