/** @file
 *  @brief Common functionality for Bluetooth Mesh BabbleSim tests.
 */

/*
 * Copyright (c) 2021 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#ifndef ZEPHYR_TESTS_BLUETOOTH_BSIM_BT_BSIM_TEST_MESH_MESH_TEST_H_
#define ZEPHYR_TESTS_BLUETOOTH_BSIM_BT_BSIM_TEST_MESH_MESH_TEST_H_
#include <zephyr/kernel.h>

#include "bs_types.h"
#include "bs_tracing.h"
#include "time_machine.h"
#include "bstests.h"

#include <zephyr/types.h>
#include <stddef.h>
#include <errno.h>
#include <zephyr/sys/printk.h>

#include <zephyr/bluetooth/bluetooth.h>
#include <zephyr/bluetooth/mesh.h>
#include <mesh/adv.h>

#define TEST_MOD_ID 0x8888
#define TEST_MSG_OP_1  BT_MESH_MODEL_OP_1(0x0f)
#define TEST_MSG_OP_2  BT_MESH_MODEL_OP_1(0x10)

#define TEST_VND_COMPANY_ID 0x1234
#define TEST_VND_MOD_ID   0x5678

#define MODEL_LIST(...) ((const struct bt_mesh_model[]){ __VA_ARGS__ })

#define FAIL(msg, ...)                                                         \
	do {                                                                   \
		bst_result = Failed;                                           \
		bs_trace_error_time_line(msg "\n", ##__VA_ARGS__);             \
	} while (0)

#define PASS()                                                                 \
	do {                                                                   \
		bst_result = Passed;                                           \
		bs_trace_info_time(1, "%s PASSED\n", __func__);                \
	} while (0)

#define ASSERT_OK(cond)                                                        \
	do {                                                                   \
		int _err = (cond);                                             \
		if (_err) {                                                    \
			bst_result = Failed;                                   \
			bs_trace_error_time_line(                              \
				#cond " failed with error %d\n", _err);        \
		}                                                              \
	} while (0)

#define ASSERT_OK_MSG(cond, fmt, ...)                                          \
	do {                                                                   \
		int _err = (cond);                                             \
		if (_err) {                                                    \
			bst_result = Failed;                                   \
			bs_trace_error_time_line(                              \
				#cond " failed with error %d\n" fmt, _err,     \
				##__VA_ARGS__);                                \
		}                                                              \
	} while (0)

#define ASSERT_TRUE(cond)                                                      \
	do {                                                                   \
		if (!(cond)) {                                                 \
			bst_result = Failed;                                   \
			bs_trace_error_time_line(                              \
				#cond " is false.\n");                         \
		}                                                              \
	} while (0)

#define ASSERT_TRUE_MSG(cond, fmt, ...)                                        \
	do {                                                                   \
		if (!(cond)) {                                                 \
			bst_result = Failed;                                   \
			bs_trace_error_time_line(                              \
				#cond " is false. " fmt, ##__VA_ARGS__);       \
		}                                                              \
	} while (0)


#define ASSERT_FALSE(cond)                                                     \
	do {                                                                   \
		if (cond) {                                                    \
			bst_result = Failed;                                   \
			bs_trace_error_time_line(                              \
				#cond " is true.\n");                          \
		}                                                              \
	} while (0)

#define ASSERT_FALSE_MSG(cond, fmt, ...)                                       \
	do {                                                                   \
		if (cond) {                                                    \
			bst_result = Failed;                                   \
			bs_trace_error_time_line(                              \
				#cond " is true. " fmt, ##__VA_ARGS__);        \
		}                                                              \
	} while (0)

#define ASSERT_EQUAL(expected, got)                                            \
	do {                                                                   \
		if ((expected) != (got)) {                                     \
			bst_result = Failed;                                   \
			bs_trace_error_time_line(                              \
				#expected " not equal to " #got ": %d != %d\n",\
				(expected), (got));                            \
		}                                                              \
	} while (0)

#define ASSERT_IN_RANGE(got, min, max)                                                             \
	do {                                                                                       \
		if (!IN_RANGE(got, min, max)) {                                            \
			bst_result = Failed;                                                       \
			bs_trace_error_time_line(#got " not in range %d <-> %d, " #got " = %d\n",  \
						 (min), (max), (got));                             \
		}                                                                                  \
	} while (0)

#define WAIT_FOR_COND(cond, wait)                                                                  \
	do {                                                                                       \
		bool _err = false;                                                                 \
		for (uint8_t sec = (wait); !(cond); sec--) {                                       \
			if (!sec) {                                                                \
				_err = true;                                                       \
				break;                                                             \
			}                                                                          \
			k_sleep(K_SECONDS(1));                                                     \
		}                                                                                  \
                                                                                                   \
		if (_err) {                                                                        \
			bst_result = Failed;                                                       \
			bs_trace_error_time_line("Waiting for " #cond " timed out\n");             \
		}                                                                                  \
	} while (0)

struct bt_mesh_test_cfg {
	uint16_t addr;
	uint8_t dev_key[16];
};

enum bt_mesh_test_send_flags {
	FORCE_SEGMENTATION = BIT(0),
	LONG_MIC = BIT(1),
};

struct bt_mesh_test_stats {
	uint32_t received;
	uint32_t sent;
	uint32_t recv_overflow;
};

struct bt_mesh_test_msg {
	sys_snode_t _node;
	size_t len;
	uint8_t seq;
	struct bt_mesh_msg_ctx ctx;
};

struct bt_mesh_test_sync_ctx {
	uint32_t *dev_nmbr;
	uint32_t *chan_nmbr;
	uint32_t *chan_id;
	uint16_t cnt;
};

extern enum bst_result_t bst_result;
extern const struct bt_mesh_test_cfg *cfg;
extern const struct bt_mesh_model *test_model;
extern const struct bt_mesh_model *test_vnd_model;
extern const uint8_t test_net_key[16];
extern const uint8_t test_app_key[16];
extern const uint8_t test_va_uuid[16];
extern struct bt_mesh_test_stats test_stats;
extern struct bt_mesh_msg_ctx test_send_ctx;

void bt_mesh_test_cfg_set(const struct bt_mesh_test_cfg *cfg, int wait_time);
void bt_mesh_test_setup(void);
void bt_mesh_test_timeout(bs_time_t HW_device_time);

void bt_mesh_device_setup(const struct bt_mesh_prov *prov, const struct bt_mesh_comp *comp);

int bt_mesh_test_recv(uint16_t len, uint16_t dst, const uint8_t *uuid, k_timeout_t timeout);
int bt_mesh_test_recv_msg(struct bt_mesh_test_msg *msg, k_timeout_t timeout);
int bt_mesh_test_recv_clear(void);

int bt_mesh_test_send(uint16_t addr, const uint8_t *uuid, size_t len,
		      enum bt_mesh_test_send_flags flags, k_timeout_t timeout);
int bt_mesh_test_send_async(uint16_t addr, const uint8_t *uuid, size_t len,
			    enum bt_mesh_test_send_flags flags,
			    const struct bt_mesh_send_cb *send_cb,
			    void *cb_data);
int bt_mesh_test_send_ra(uint16_t addr, uint8_t *data, size_t len,
			 const struct bt_mesh_send_cb *send_cb,
			 void *cb_data);
void bt_mesh_test_ra_cb_setup(void (*cb)(uint8_t *, size_t));

uint16_t bt_mesh_test_own_addr_get(uint16_t start_addr);

void bt_mesh_test_send_over_adv(void *data, size_t len);
/* Wait for a packet (i. e. an advertisement or a GATT frame) sent by a device.
 * `scan_cb` is triggered if the packet is received, and must release `observer_sem` when finished.
 */
int bt_mesh_test_wait_for_packet(bt_le_scan_cb_t scan_cb, struct k_sem *observer_sem,
				 uint16_t wait);

#if defined(CONFIG_BT_MESH_SAR_CFG)
void bt_mesh_test_sar_conf_set(struct bt_mesh_sar_tx *tx_set, struct bt_mesh_sar_rx *rx_set);
#endif

#endif /* ZEPHYR_TESTS_BLUETOOTH_BSIM_BT_BSIM_TEST_MESH_MESH_TEST_H_ */
