#ifndef _SWAP_LIB_CALLS_H_
#define _SWAP_LIB_CALLS_H_

#include "stdbool.h"

#define RUN_APPLICATION 1

#define SIGN_TRANSACTION 2

#define CHECK_ADDRESS 3

#define GET_PRINTABLE_AMOUNT 4

#define MAX_PRINTABLE_AMOUNT_SIZE 50

// structure that should be send to specific coin application to get address
typedef struct check_address_parameters_s {
    // IN
    const unsigned char* const coin_configuration;
    const unsigned char coin_configuration_length;
    // serialized path, segwit, version prefix, hash used, dictionary etc.
    // fields and serialization format depends on spesific coin app
    const unsigned char* const address_parameters;
    const unsigned char address_parameters_length;
    const char* const address_to_check;
    const char* const extra_id_to_check;
    // OUT
    int result;
} check_address_parameters_t;

// structure that should be send to specific coin application to get printable amount
typedef struct get_printable_amount_parameters_s {
    // IN
    const unsigned char* const coin_configuration;
    const unsigned char coin_configuration_length;
    const unsigned char* const amount;
    const unsigned char amount_length;
    const bool is_fee;
    // OUT
    char printable_amount[MAX_PRINTABLE_AMOUNT_SIZE];
    // int result;
} get_printable_amount_parameters_t;

typedef struct create_transaction_parameters_s {
    const unsigned char* const coin_configuration;
    const unsigned char coin_configuration_length;
    const unsigned char* const amount;
    const unsigned char amount_length;
    const unsigned char* const fee_amount;
    const unsigned char fee_amount_length;
    const char* const destination_address;
    const char* const destination_address_extra_id;
} create_transaction_parameters_t;

#endif  // _SWAP_LIB_CALLS_H_
