//
//  VePlayerHelper.h
//  react-native-veplayer
//
//  Created by ByteDance on 2025/3/12.
//  Copyright © 2025 ByteDance. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <TTSDKFramework/TTVideoEngine.h>

NS_ASSUME_NONNULL_BEGIN

/**
 * VePlayer辅助工具类
 * 提供播放器调试和音频会话管理功能
 */
@interface VePlayerHelper : NSObject

/**
 * 启用模拟器调试模式
 * 在模拟器环境下启用特定的播放器配置以支持调试
 *
 * @param videoEngine 要配置的视频引擎实例
 * @note 仅在iOS模拟器环境下生效
 */
+ (void)enableSimulatorDebug:(TTVideoEngine *)videoEngine;

/**
 * 设置音频会话激活状态
 * 控制应用的音频会话，支持在iOS静音模式下播放音频
 *
 * @param active YES表示激活音频会话，NO表示停用音频会话
 * @note 仅在iOS平台上生效，用于实现静音模式下的音频播放
 */
+ (void)setActiveAudioSession:(BOOL)active;

+ (nullable TTVideoEngine *)getPlayer:(NSString *)key;

+ (void)setPlayer:(TTVideoEngine *)player forKey:(NSString *)key;

+ (void)removePlayer:(NSString *)key;

/**
 * 根据JSON数据构造视频播放源
 * 从JSON数组创建多个清晰度的视频信息，并构造统一的播放源
 *
 * @param infoList JSON数组，包含多个视频清晰度信息
 * @param vid 视频ID
 * @param resolution
 * 视频分辨率类型，如果为nil则使用TTVideoEngineResolutionTypeHD
 * @return 构造好的视频播放源，失败时返回nil
 * @note 每个info对象应包含: mainPlayUrl, definition, fileType, codec, bitrate,
 * md5等字段
 */
+ (nullable TTVideoEngineVideoModelSource *)
    constructSourceFromJSON:(NSArray<NSDictionary *> *)infoList
                        vid:(NSString *)vid
                 resolution:(nullable NSNumber *)resolution;

+ (void)setEnvBeforeStart;
+ (void)initStartupAutoSelectStrategy;
+ (void)initABRStrategy:(TTVideoEngineResolutionType)defaultABRResolution;
+ (void)setABRDelegate:(TTVideoEngine *)player
      wifiMaxResolution:(TTVideoEngineResolutionType)wifiMaxResolution
    mobileMaxResolution:(TTVideoEngineResolutionType)mobileMaxResolution;
+ (void)EnableHLSProxy;

/// 安全销毁播放器。保证以下顺序在主线程同步执行：
///   1. 停止并销毁 PiP（解除 AVKit KVO 观察）
///   2. 清空 delegate / resolutionDelegate
///   3. 调用 engine close
/// 这三步必须是原子的——任何步骤间插入异步操作都可能导致
/// AVKit KVO 回调访问已释放的 playerController，引发 objc_retain crash。
+ (void)safeCloseEngine:(TTVideoEngine *)engine stopPip:(BOOL)stopPip;

@end

NS_ASSUME_NONNULL_END
