type VideoListParams = { camera_name?: string; start_date?: string; end_date?: string; limit?: number; page?: number; offset?: number; include_metadata?: boolean; min_size_mb?: number; max_size_mb?: number } type VideoFile = { file_id: string; camera_name: string; filename: string; file_size_bytes: number; format: string; status: string; created_at: string; is_streamable: boolean; needs_conversion: boolean } type VideoListResponse = { videos: VideoFile[]; total_count: number; page?: number; total_pages?: number } const BASE = (import.meta as any).env?.VITE_MEDIA_API_URL || (import.meta as any).env?.VITE_VISION_API_URL || '/api' async function get(path: string): Promise { const res = await fetch(path, { headers: { 'Accept': 'application/json' } }) if (!res.ok) throw new Error(`Request failed: ${res.status}`) return res.json() as Promise } export async function fetchVideos(params: VideoListParams = {}): Promise { const search = new URLSearchParams() Object.entries(params).forEach(([k, v]) => { if (v !== undefined && v !== null) search.append(k, String(v)) }) const qs = search.toString() return get(`${BASE}/videos/${qs ? `?${qs}` : ''}`) }