/**
 * 本地视频加载 Hook
 * =================
 *
 * 调用 getPreviewVideoUrl 获取浏览器兼容的预览视频 URL。
 * 首次加载时后台自动转码（H.264 Baseline + YUV420p），缓存后复用。
 * 替代原有的 readFile + Blob URL 模式，零内存拷贝，支持 video 标签流式播放与 seek。
 */

import { useState, useEffect } from 'react';
import { getPreviewVideoUrl } from '../utils/videoPreview';

interface UseLocalVideoResult {
  videoUrl: string | undefined;
  isLoading: boolean;
  error: string | null;
}

/**
 * 加载本地视频文件，返回预览用的 asset:// URL
 *
 * @param filePath 本地文件绝对路径（如 /Users/.../scene_1.mp4）
 * @returns 转码后的 asset:// URL 或 undefined（远程 URL 直接返回）
 */
export function useLocalVideo(filePath: string | undefined): UseLocalVideoResult {
  const [videoUrl, setVideoUrl] = useState<string | undefined>(undefined);
  const [isLoading, setIsLoading] = useState(false);
  const [error, setError] = useState<string | null>(null);

  useEffect(() => {
    if (!filePath) {
      setVideoUrl(undefined);
      setIsLoading(false);
      setError(null);
      return;
    }

    // 远程 URL 直接使用
    if (filePath.startsWith('http')) {
      setVideoUrl(filePath);
      setIsLoading(false);
      setError(null);
      return;
    }

    let canceled = false;

    async function load() {
      setIsLoading(true);
      setError(null);

      try {
        const url = await getPreviewVideoUrl(filePath!);
        if (canceled) {return;}

        setVideoUrl(url);
      } catch (e) {
        if (!canceled) {
          console.error('[useLocalVideo] Failed to load video:', e);
          setError(e instanceof Error ? e.message : '加载失败');
          setVideoUrl(undefined);
        }
      } finally {
        if (!canceled) {
          setIsLoading(false);
        }
      }
    }

    load();

    return () => {
      canceled = true;
    };
  }, [filePath]);

  return { videoUrl, isLoading, error };
}
