// 设备间蓝牙图片传输模块
// 发送方：GATT Client 扫描→连接→分包写入图片
// 接收方：复用现有 GATT Server，通过模式标识区分 APP/设备来源
#pragma once

#include <stdbool.h>
#include <stdint.h>

// 传输状态
typedef enum {
    BLE_XFER_IDLE,          // 空闲
    BLE_XFER_SCANNING,     // 发送方扫描中
    BLE_XFER_CONNECTING,   // 发送方连接中
    BLE_XFER_SENDING,      // 发送方传输中
    BLE_XFER_RECEIVING,    // 接收方接收中（由GATT Server端检测）
    BLE_XFER_DONE,         // 传输完成
    BLE_XFER_FAILED,       // 传输失败
} ble_xfer_state_t;

// 初始化传输模块（注册GATT Client回调）
void ble_transfer_init(void);

// 发送方：开始扫描并发送当前图片
// 调用后进入扫描→连接→传输流程，UI由key_nav管理
void ble_transfer_start_send(void);

// 接收方：开始广播等待其他设备连接
// 复用现有GATT Server，设置接收模式标识
void ble_transfer_start_receive(void);

// 取消当前传输（发送方或接收方均可调用）
void ble_transfer_cancel(void);

// 获取当前传输状态
ble_xfer_state_t ble_transfer_get_state(void);

// 查询是否处于设备间传输的接收模式（供GATT Server写入回调判断）
bool ble_transfer_is_receiving(void);

// === 以下函数由 ble.c 的 GAP/GATTS 回调转发调用 ===

// 处理扫描结果（由 esp_gap_cb 转发）
void ble_transfer_handle_scan_result(void *param);

// 处理扫描停止（由 esp_gap_cb 转发）
void ble_transfer_handle_scan_stop(void);

// 图片接收完成通知（由 GATTS 写入完成时调用）
void ble_transfer_on_receive_complete(void);
