#!/usr/bin/env python3
"""Utilitários de busca e download de B-roll via Pexels API."""

import os
import requests

PEXELS_KEY = os.getenv("PEXELS_API_KEY", "YDqxXGXvOaPQnitSVyxbhghbH49w95DV2fbAkynBjNVvus1TI60Qffdo")


def buscar_videos(query: str, quantidade: int = 3) -> list:
    """
    Busca vídeos relevantes na Pexels em orientacao portrait.
    Retorna lista de dicts com 'url', 'duracao', 'id'.
    """
    if not PEXELS_KEY:
        print(f"[pexels] AVISO: chave nao configurada. Busca ignorada para '{query}'.")
        return []

    headers = {"Authorization": PEXELS_KEY}
    try:
        r = requests.get(
            "https://api.pexels.com/videos/search",
            headers=headers,
            params={
                "query": query,
                "per_page": quantidade,
                "orientation": "portrait",
                "size": "medium"
            },
            timeout=15
        )
    except Exception as e:
        print(f"[pexels] Erro na requisicao: {e}")
        return []

    if r.status_code != 200:
        print(f"[pexels] Status {r.status_code} para query '{query}'")
        return []

    videos = []
    for v in r.json().get("videos", []):
        # Prefere arquivo com largura >= 720
        for f in sorted(v.get("video_files", []), key=lambda x: x.get("width", 0), reverse=True):
            if f.get("width", 0) >= 720:
                videos.append({
                    "url": f["link"],
                    "duracao": v.get("duration", 10),
                    "id": v["id"]
                })
                break

    return videos


def baixar_video(url: str, destino: str) -> bool:
    """Baixa um vídeo da Pexels para o caminho destino."""
    try:
        r = requests.get(url, stream=True, timeout=60)
        r.raise_for_status()
        with open(destino, "wb") as f:
            for chunk in r.iter_content(chunk_size=8192):
                f.write(chunk)
        return True
    except Exception as e:
        print(f"[pexels] Erro ao baixar {url}: {e}")
        return False
