/**
 * SD卡录像封面 Helper
 * 从 EZPlayBackListActivity / RecordQueryHelper 拆分出来，负责封面链接初始化、封面请求、资源释放
 */
package com.videogo.ui.playback.helper;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import com.videogo.openapi.EzvizAPI;
import com.videogo.openapi.bean.EZDeviceRecordFile;
import com.videogo.openapi.bean.resp.CloudPartInfoFile;
import com.videogo.remoteplayback.RecordCoverFetcherManager;
import com.videogo.ui.common.EZBusinessTool;
import com.videogo.ui.playback.EZPlayBackListActivity;
import com.videogo.util.LogUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * SD卡录像封面 Helper
 * 管理 RecordCoverFetcherManager 的初始化/请求/释放，与设备建立链接获取SD卡录像封面
 *
 * 直接持有 Activity 引用，生命周期与 Activity 一致
 */
public class RecordCoverHelper {

    private static final String TAG = "RecordCoverHelper";

    private final EZPlayBackListActivity mActivity;// Activity 引用

    /**
     * 封面获取回调接口
     */
    public interface OnCoverFetchedListener {
        /**
         * 封面获取成功
         * @param seq 录像在列表中的索引
         * @param bitmap 封面图片
         */
        void onCoverFetched(int seq, Bitmap bitmap);
    }

    public RecordCoverHelper(EZPlayBackListActivity activity) {
        this.mActivity = activity;
    }

    // region --- 公开方法 ---

    /**
     * 初始化封面链接（仅国内支持，海外不支持）
     * 在 onCreate 中调用，页面退出时必须调用 stopFetcher 释放资源
     */
    public void initFetcher() {
        if (EzvizAPI.getInstance().isUsingGlobalSDK()) {
            return;
        }
        RecordCoverFetcherManager.getInstance().initFetcher(mActivity,
                mActivity.mCameraInfo.getDeviceSerial(),
                mActivity.mCameraInfo.getCameraNo(),
                new RecordCoverFetcherManager.RecordCoverFetcherInitCallBack() {
                    @Override
                    public void onFetcherInitSuccess() {
                    }

                    @Override
                    public void onFetcherInitFailed() {
                    }
                });
    }

    /**
     * 断开与设备的链接，释放资源（onDestroy 时调用）
     */
    public void stopFetcher() {
        if (!EzvizAPI.getInstance().isUsingGlobalSDK()) {
            RecordCoverFetcherManager.getInstance().stopFetcher();
        }
    }

    /**
     * 判断设备是否支持SD卡录像封面
     */
    public boolean isSupportSdCover() {
        return EZBusinessTool.isSupportSdCover(mActivity.mDeviceInfo, mActivity.mCameraInfo);
    }

    /**
     * 请求SD卡录像列表的封面图片
     * @param cloudPartInfoFiles 录像片段列表
     * @param listener 封面获取成功回调
     */
    public void requestRecordCovers(List<CloudPartInfoFile> cloudPartInfoFiles, OnCoverFetchedListener listener) {
        if (EzvizAPI.getInstance().isUsingGlobalSDK() || !isSupportSdCover()) {
            return;
        }
        // 构建请求列表
        List<EZDeviceRecordFile> recordFiles = new ArrayList<>();
        for (int i = 0; i < cloudPartInfoFiles.size(); i++) {
            CloudPartInfoFile file = cloudPartInfoFiles.get(i);
            EZDeviceRecordFile recordFile = new EZDeviceRecordFile();
            recordFile.setBegin(file.getBegin());
            recordFile.setEnd(file.getEnd());
            recordFile.setSeq(i);// 设置索引，封面回调的时候知道对应哪一个录像
            recordFiles.add(recordFile);
        }
        RecordCoverFetcherManager.getInstance().requestRecordCover(recordFiles,
                new RecordCoverFetcherManager.RecordCoverFetcherCallBack() {
                    @Override
                    public void onGetCoverSuccess(int seq, byte[] bytes) {
                        // 此处将bytes转为bitmap。开发者也可自行将bytes转为文件，进行缓存管理。
                        Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                        if (listener != null) {
                            listener.onCoverFetched(seq, bitmap);
                        }
                    }

                    @Override
                    public void onGetCoverFailed(int errorCode) {
                        LogUtil.e(TAG, "onGetCoverFailed, errorCode=" + errorCode);
                    }
                });
    }

    // endregion
}
