#pragma once

#include <furi_hal.h>

typedef void (*SubGhzFileEncoderWorkerCallbackEnd)(void* context);

typedef struct SubGhzFileEncoderWorker SubGhzFileEncoderWorker;

/** 
 * End callback SubGhzWorker.
 * @param instance SubGhzFileEncoderWorker instance
 * @param callback SubGhzFileEncoderWorkerCallbackEnd callback
 */
void subghz_file_encoder_worker_callback_end(
    SubGhzFileEncoderWorker* instance,
    SubGhzFileEncoderWorkerCallbackEnd callback_end,
    void* context_end);

/** 
 * Allocate SubGhzFileEncoderWorker.
 * @return SubGhzFileEncoderWorker* pointer to a SubGhzFileEncoderWorker instance 
 */
SubGhzFileEncoderWorker* subghz_file_encoder_worker_alloc();

/** 
 * Free SubGhzFileEncoderWorker.
 * @param instance Pointer to a SubGhzFileEncoderWorker instance
 */
void subghz_file_encoder_worker_free(SubGhzFileEncoderWorker* instance);

/**
 * Getting the level and duration of the upload to be loaded into DMA.
 * @param context Pointer to a SubGhzFileEncoderWorker instance
 * @return LevelDuration 
 */
LevelDuration subghz_file_encoder_worker_get_level_duration(void* context);

/** 
 * Start SubGhzFileEncoderWorker.
 * @param instance Pointer to a SubGhzFileEncoderWorker instance
 * @return bool - true if ok
 */
bool subghz_file_encoder_worker_start(SubGhzFileEncoderWorker* instance, const char* file_path);

/** 
 * Stop SubGhzFileEncoderWorker
 * @param instance Pointer to a SubGhzFileEncoderWorker instance
 */
void subghz_file_encoder_worker_stop(SubGhzFileEncoderWorker* instance);

/** 
 * Check if worker is running
 * @param instance Pointer to a SubGhzFileEncoderWorker instance
 * @return bool - true if running
 */
bool subghz_file_encoder_worker_is_running(SubGhzFileEncoderWorker* instance);