#include <stdint.h>
#include <string.h>
#include "sharekit_api.h"

// 空回调:仅占位,无业务逻辑
static void dummy_progress(ShareProgress *p) { (void)p; }
static void dummy_status(ShareStatus *s) { (void)s; }

// 仅测试 StartSendFile 接口
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    // 前置:仅初始化一次 SDK
    static int sdk_inited = 0;
    if (!sdk_inited) {
        InitContext ctx = {0};
        InitShareKit(&ctx);
        sdk_inited = 1;
    }

    // 最小化参数构造:无动态内存、无业务逻辑
    // 1. deviceId:仅用模糊数据填充固定长度
    char device_id[NAME_STR_LEN] = {0};
    memcpy(device_id, data, (size < NAME_STR_LEN) ? size : NAME_STR_LEN);

    // 2. SendFileHandler:完全置零,无文件列表(避免内存分配)
    SendFileHandler handler = {0};
    // 模糊控制回调是否为空
    if (size > 0 && data[0] % 2 == 0) {
        handler.progressCallback = dummy_progress;
        handler.statusChangeCallback = dummy_status;
    } else {
        handler.progressCallback = NULL;
        handler.statusChangeCallback = NULL;
    }
    // 核心:无文件列表,避免动态内存分配干扰
    handler.fileList.fileNum = 0;
    handler.fileList.uriList = NULL;
    handler.fileList.previewFileUri = NULL;

    // 唯一测试动作:调用 StartSendFile
    StartSendFile(device_id, &handler);

    return 0;
}