// #ifndef REMOTE_H
// #define REMOTE_H

#include <zephyr.h>
#include <logging/log.h>

#include <bluetooth/bluetooth.h>
#include <bluetooth/uuid.h>
#include <bluetooth/gatt.h>
#include <bluetooth/hci.h>
// #include <bluetooth/conn.h> //check sau


/*  Note that UUIDs have Least Significant Byte ordering
    sử dung https://uuidonline.net/ để tạo ra UUID
*/
// UUID này là mimic của một sản phẩm remote phân cứng, tham khảo: https://devzone.nordicsemi.com/guides/nrf-connect-sdk-guides/b/getting-started/posts/ncs-ble-tutorial-part-1-custom-service-in-peripheral-role
#define BT_UUID_REMOTE_SERV_VAL \
    BT_UUID_128_ENCODE(0xe9ea0001, 0xe19b, 0x482d, 0x9293, 0xc7907585fc48)

// UUID của button characteristic
#define BT_UUID_REMOTE_BUTTON_CHRC_VAL \
    BT_UUID_128_ENCODE(0xe9ea0002, 0xe19b, 0x482d, 0x9293, 0xc7907585fc48)

/** @brief UUID of the Message Characteristic. **/
#define BT_UUID_REMOTE_MESSAGE_CHRC_VAL \
	BT_UUID_128_ENCODE(0xe9ea0003, 0xe19b, 0x482d, 0x9293, 0xc7907585fc48)

//Helper to declare a 128-bit UUID inline. Chuyển UUID thành một line
#define BT_UUID_REMOTE_SERVICE       BT_UUID_DECLARE_128(BT_UUID_REMOTE_SERV_VAL)
#define BT_UUID_REMOTE_BUTTON_CHRC   BT_UUID_DECLARE_128(BT_UUID_REMOTE_BUTTON_CHRC_VAL)
#define BT_UUID_REMOTE_MESSAGE_CHRC  BT_UUID_DECLARE_128(BT_UUID_REMOTE_MESSAGE_CHRC_VAL)

/* thêm vào khi dùng notification cho peripheral để update giá trị tới central
    gọi là custom service callback, thêm cả enum và bt_remote_srv_cb bên dưới
*/

enum bt_button_notifications_enabled {
    BT_BUTTON_NOTIFICATIONS_ENABLED, //giá trị đầu tiên là 0
    BT_BUTTON_NOTIFICATIONS_DISABLED, //giá trị tiếp theo là 1
};

struct bt_remote_service_cb {
    //khai báo function pointer có input là enum ở trên, cùng tên enum là được
    void (*notif_changed)(enum bt_button_notifications_enabled status); //status có kiểu enum bt_button_notifications_enabled
    void (*data_received)(struct bt_conn *conn, const uint8_t *const data, uint16_t len);
};

int send_button_notification(struct bt_conn *conn, uint8_t value, uint16_t length);
void set_button_value (uint8_t btn_value);
int bluetooth_init(struct bt_conn_cb *bt_cb, struct bt_remote_service_cb *remote_cb);

// #endif
