/** @file
 *  @brief Bluetooth Hearing Access Service (HAS) Server role.
 *
 *  Copyright (c) 2022 Codecoup
 *
 *  SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/kernel.h>
#include <zephyr/sys/printk.h>
#include <zephyr/sys/util.h>

#include <zephyr/bluetooth/audio/has.h>

#define PRESET_INDEX_UNIVERSAL  1
#define PRESET_INDEX_OUTDOOR    5
#define PRESET_INDEX_NOISY_ENV  8
#define PRESET_INDEX_OFFICE     22

static int select_cb(uint8_t index, bool sync)
{
	printk("%s %u sync %d", __func__, index, sync);

	return 0;
}

static void name_changed_cb(uint8_t index, const char *name)
{
	printk("%s %u name %s", __func__, index, name);
}

static const struct bt_has_preset_ops ops = {
	.select = select_cb,
	.name_changed = name_changed_cb,
};

int has_server_preset_init(void)
{
	int err;

	struct bt_has_preset_register_param param[] = {
		{
			.index = PRESET_INDEX_UNIVERSAL,
			.properties = BT_HAS_PROP_AVAILABLE | BT_HAS_PROP_WRITABLE,
			.name = "Universal",
			.ops = &ops,
		},
		{
			.index = PRESET_INDEX_OUTDOOR,
			.properties = BT_HAS_PROP_AVAILABLE | BT_HAS_PROP_WRITABLE,
			.name = "Outdoor",
			.ops = &ops,
		},
		{
			.index = PRESET_INDEX_NOISY_ENV,
			.properties = BT_HAS_PROP_AVAILABLE | BT_HAS_PROP_WRITABLE,
			.name = "Noisy environment",
			.ops = &ops,
		},
		{
			.index = PRESET_INDEX_OFFICE,
			.properties = BT_HAS_PROP_AVAILABLE | BT_HAS_PROP_WRITABLE,
			.name = "Office",
			.ops = &ops,
		},
	};

	for (size_t i = 0; i < ARRAY_SIZE(param); i++) {
		err = bt_has_preset_register(&param[i]);
		if (err != 0) {
			return err;
		}
	}

	return 0;
}

static struct bt_has_register_param param = {
	.type = BT_HAS_HEARING_AID_TYPE_MONAURAL
};

int has_server_init(void)
{
	int err;

	if (IS_ENABLED(CONFIG_HAP_HA_HEARING_AID_BINAURAL)) {
		param.type = BT_HAS_HEARING_AID_TYPE_BINAURAL;
	} else if (IS_ENABLED(CONFIG_HAP_HA_HEARING_AID_BANDED)) {
		param.type = BT_HAS_HEARING_AID_TYPE_BANDED;
	}

	err = bt_has_register(&param);
	if (err) {
		return err;
	}

	return has_server_preset_init();
}
