/*
 * This file is part of MXE. See LICENSE.md for licensing information.
 */

#include <signal_protocol.h>
#include <session_builder.h>
#include <session_cipher.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    int result = 0;
    printf("Beginning of test...\\n");
    printf("0\\n");

    signal_context *global_context = NULL;
    result = signal_context_create(&global_context, NULL);
    if (result != SG_SUCCESS) return 1;
    printf("1\\n");

    signal_protocol_store_context *store_context = NULL;
    result = signal_protocol_store_context_create(&store_context, global_context);
    if (result != SG_SUCCESS) return 1;
    printf("2\\n");

    signal_protocol_session_store session_store = {
        NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
    };
    result = signal_protocol_store_context_set_session_store(store_context, &session_store);
    if (result != SG_SUCCESS) return 1;
    printf("3\\n");

    signal_protocol_pre_key_store pre_key_store = {
        NULL, NULL, NULL, NULL, NULL, NULL
    };
    result = signal_protocol_store_context_set_pre_key_store(store_context, &pre_key_store);
    if (result != SG_SUCCESS) return 1;
    printf("4\\n");

    signal_protocol_signed_pre_key_store signed_pre_key_store = {
        NULL, NULL, NULL, NULL, NULL, NULL
    };
    result = signal_protocol_store_context_set_signed_pre_key_store(store_context, &signed_pre_key_store);
    if (result != SG_SUCCESS) return 1;
    printf("5\\n");

    signal_protocol_identity_key_store identity_key_store = {
        NULL, NULL, NULL, NULL, NULL, NULL
    };
    result = signal_protocol_store_context_set_identity_key_store(store_context, &identity_key_store);
    if (result != SG_SUCCESS) return 1;
    printf("6\\n");

    signal_protocol_address address = {
        "+14159998888", 12, 1
    };
    session_builder *builder = NULL;
    result = session_builder_create(&builder, store_context, &address, global_context);
    if (result != SG_SUCCESS) return 1;
    printf("7\\n");

    session_cipher *cipher = NULL;
    result = session_cipher_create(&cipher, store_context, &address, global_context);
    if (result != SG_SUCCESS) return 1;
    printf("8\\n");

    session_cipher_free(cipher);
    session_builder_free(builder);
    signal_protocol_store_context_destroy(store_context);
    printf("9\\n");

    return 0;
}