#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <assert.h>
#include <pb_encode.h>
#include <pb_decode.h>
#include "unittests.h"
#include "naming_style.pb.h"

int main()
{
    int status = 0;
    main_message_t message = MAIN_MESSAGE_INIT_ZERO;

    /* Verify that all members have the expected names */
    message.lucky_number = 13;
    message.required_number = 1;
    message.repeated_number[0] = 1;
    message.repeated_ints = NULL;

    message.my_enum1 = MY_ENUM1_ENUM_THIRD;
    message.my_enum2 = MY_ENUM2_ENUM2_ENTRY;
    message.my_enum3 = MY_ENUM2_ENUM2_ENTRY;
    message.my_enum4.arg = NULL;

    message.string_values1 = NULL;
    message.string_values2[0][0] = 'a';
    message.optional_string.arg = NULL;
    message.required_string[0] = 'a';

    message.repeated_fixed32[0] = 1;

    message.required_bytes1[0] = 0;
    message.required_bytes2.size = 0;
    message.repeated_bytes1_count = 0;
    message.repeated_bytes2 = NULL;

    message.has_sub_message1 = true;
    message.sub_message1.has_test_value = true;
    message.sub_message1.test_value = 0;
    message.sub_message2.arg = NULL;
    message.sub_message3.test_value = 0;

    message.which_one_of_name = MAIN_MESSAGE_TEST_MESSAGE2_TAG;
    message.one_of_name.test_message2.has_test_value = true;
    message.one_of_name.test_message2.test_value = 5;

    message.which_one_of_name2 = MAIN_MESSAGE_TEST_MESSAGE5_TAG;
    message.test_message5.test_value = 5;

    TEST(strcmp("ENTRY_FIRST", my_enum1_name(MY_ENUM1_ENTRY_FIRST)) == 0);

    /* Verify that the descriptor structure is at least mostly correct
     * by doing a round-trip encoding test.
     */
    {
        uint8_t buffer1[256];
        uint8_t buffer2[256];
        pb_ostream_t ostream1 = pb_ostream_from_buffer(buffer1, sizeof(buffer1));
        pb_ostream_t ostream2 = pb_ostream_from_buffer(buffer2, sizeof(buffer2));
        pb_istream_t istream;
        main_message_t message2 = MAIN_MESSAGE_INIT_ZERO;

        TEST(pb_encode(&ostream1, &main_message_t_msg, &message));

        istream = pb_istream_from_buffer(buffer1, ostream1.bytes_written);
        TEST(pb_decode(&istream, &main_message_t_msg, &message2));

        /* Encoding a second time should produce same output */
        TEST(pb_encode(&ostream2, &main_message_t_msg, &message2));

        TEST(ostream2.bytes_written == ostream1.bytes_written);
        TEST(memcmp(buffer1, buffer2, ostream1.bytes_written) == 0);
    }

    return status;
}
