#import "TTVideoEngine.h"
#import "TTVideoEnginePreloader.h"
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

// 前向声明
@class TTVideoEngineUrlSource;
@class TTVideoEngineVidSource;
@class TTVideoEngineVideoModelSource;

/**
 * 预加载监听器协议
 * 用于监听预加载任务的状态变化
 */
@protocol PreloadLoaderListener <NSObject>

@optional

/**
 * 预加载任务开始
 * @param info 任务信息（可选）
 */
- (void)onStart:(NSDictionary *_Nullable)info;

/**
 * 预加载任务成功
 * @param data 任务数据（可选）
 */
- (void)onSuccess:(NSDictionary *_Nullable)data;

/**
 * 预加载任务失败
 * @param error 错误信息
 */
- (void)onFail:(NSError *_Nullable)error;

/**
 * 预加载任务取消
 */
- (void)onCancel;

@end

/**
 * 预加载加载器实现类
 * 负责管理iOS平台的视频预加载功能
 */
@interface PreloadLoaderImpl : NSObject

/**
 * 预加载DirectUrlSource
 * @param source 视频源
 * @param preloadSize 预加载大小（字节）
 */
- (void)preloadURLSource:(TTVideoEngineUrlSource *)source
             preloadSize:(NSInteger)preloadSize;

/**
 * 预加载VidSource
 * @param source 视频源
 * @param preloadSize 预加载大小（字节）
 */
- (void)preloadVidSource:(TTVideoEngineVidSource *)source
             preloadSize:(NSInteger)preloadSize;

/**
 * 预加载VideoModelSource
 * @param source 视频源
 * @param preloadSize 预加载大小（字节）
 */
- (void)preloadVideoModelSource:(TTVideoEngineVideoModelSource *)source
                    preloadSize:(NSInteger)preloadSize;

/**
 * 设置预加载监听器
 * @param listener 监听器对象
 */
- (void)setListener:(id<PreloadLoaderListener> _Nullable)listener;

@end

NS_ASSUME_NONNULL_END
