#ifndef AV_RECORDER_H
#define AV_RECORDER_H

/**
 * AV录制器模块
 * 
 * 这个模块提供了完整的音视频录制功能，基于AV模块的现有组件构建。
 * 主要特性：
 * - 音频录制：支持多设备采集、混音、实时编码
 * - 视频录制：支持屏幕录制、窗口采集、摄像头录制
 * - 音视频同步：提供精确的音视频同步机制
 * - 模块化设计：可独立使用音频或视频录制器
 * - 高性能：多线程处理，支持硬件加速
 * 
 * 使用示例：
 * 
 * // 音频录制
 * auto audioRecorder = RecorderFactoryImpl::createAudioRecorder();
 * AudioRecorderParams audioParams;
 * audioParams.outputPath = "output.mp4";
 * audioParams.sampleRate = 44100;
 * audioParams.channels = 2;
 * audioRecorder->initialize(audioParams);
 * audioRecorder->startRecording();
 * 
 * // 视频录制
 * auto videoRecorder = RecorderFactoryImpl::createVideoRecorder();
 * VideoRecorderParams videoParams;
 * videoParams.outputPath = "output.mp4";
 * videoParams.width = 1920;
 * videoParams.height = 1080;
 * videoParams.frameRate = 30;
 * videoRecorder->initialize(videoParams);
 * videoRecorder->startRecording();
 * 
 * // 音视频同步录制
 * auto avRecorder = RecorderFactoryImpl::createAVRecorder();
 * AVRecorderParams avParams;
 * avParams.outputPath = "output.mp4";
 * avParams.enableAudio = true;
 * avParams.enableVideo = true;
 * avParams.enableSync = true;
 * avRecorder->initialize(avParams);
 * avRecorder->startRecording();
 */

// 核心接口
#include "recorder_abstract_recorder.h"

// 具体实现
#include "recorder_audio_recorder.h"
#include "recorder_video_recorder.h"
#include "recorder_av_recorder.h"

namespace av {
namespace recorder {

/**
 * 录制器模块版本信息
 */
struct RecorderVersion {
    static constexpr int MAJOR = 1;
    static constexpr int MINOR = 0;
    static constexpr int PATCH = 0;
    
    static std::string toString() {
        return std::to_string(MAJOR) + "." + 
               std::to_string(MINOR) + "." + 
               std::to_string(PATCH);
    }
};

/**
 * 录制器模块初始化
 */
class RecorderModule {
public:
    /**
     * 初始化录制器模块
     */
    static ErrorCode initialize();
    
    /**
     * 清理录制器模块
     */
    static void cleanup();
    
    /**
     * 获取模块版本
     */
    static std::string getVersion() {
        return RecorderVersion::toString();
    }
    
    /**
     * 检查模块是否已初始化
     */
    static bool isInitialized();
    
    /**
     * 获取支持的录制格式
     */
    static std::vector<std::string> getSupportedFormats();
    
    /**
     * 获取支持的音频编码器
     */
    static std::vector<std::string> getSupportedAudioCodecs();
    
    /**
     * 获取支持的视频编码器
     */
    static std::vector<std::string> getSupportedVideoCodecs();

private:
    static bool initialized_;
};

/**
 * 便利函数
 */
namespace utils {

/**
 * 创建音频录制器的便利函数
 */
inline std::unique_ptr<AudioRecorder> createAudioRecorder() {
    return RecorderFactoryImpl::createAudioRecorder();
}

/**
 * 创建视频录制器的便利函数
 */
inline std::unique_ptr<VideoRecorder> createVideoRecorder() {
    return RecorderFactoryImpl::createVideoRecorder();
}

/**
 * 创建音视频录制器的便利函数
 */
inline std::unique_ptr<AVRecorder> createAVRecorder() {
    return RecorderFactoryImpl::createAVRecorder();
}

/**
 * 获取默认音频参数
 */
AudioRecorderParams getDefaultAudioParams();

/**
 * 获取默认视频参数
 */
VideoRecorderParams getDefaultVideoParams();

/**
 * 获取默认音视频参数
 */
AVRecorderParams getDefaultAVParams();

/**
 * 检查输出路径是否有效
 */
bool isValidOutputPath(const std::string& path);

/**
 * 获取推荐的录制参数（基于系统性能）
 */
VideoRecorderParams getRecommendedVideoParams();

} // namespace utils

} // namespace recorder
} // namespace av

#endif // AV_RECORDER_H