#!/usr/bin/env python3
"""
Video generation script using Google's Veo 3 API
Generates an 8-second video with the prompt "video about a cat dancing"
"""

import os
import time
import google.generativeai as genai
from typing import Optional
from dotenv import load_dotenv

load_dotenv()


def setup_api_key() -> None:
    """Setup the Google AI API key from environment variable."""
    api_key = os.getenv("GOOGLE_AI_API_KEY")
    if not api_key:
        raise ValueError(
            "GOOGLE_AI_API_KEY environment variable is required. "
            "Get your API key from https://aistudio.google.com/app/apikey"
        )
    genai.configure(api_key=api_key)


def generate_video(
    prompt: str, model_name: str = "veo-3.0-generate-preview"
) -> Optional[str]:
    """
    Generate a video using the Veo 3 API.

    Args:
        prompt: Text prompt for video generation
        model_name: Model to use (veo-3.0-generate-preview or veo-3.0-fast-generate-preview)

    Returns:
        Video file URI if successful, None otherwise
    """
    try:
        model = genai.GenerativeModel(model_name)

        print(f"Generating video with prompt: '{prompt}'")
        print("This may take 11 seconds to 6 minutes...")

        response = model.generate_content(
            prompt,
            generation_config=genai.GenerationConfig(
                temperature=0.7,
            ),
        )

        if hasattr(response, "parts") and response.parts:
            for part in response.parts:
                if hasattr(part, "file_data"):
                    print(f"Video generated successfully!")
                    print(f"Video URI: {part.file_data.file_uri}")
                    print("Note: Video will be available for 2 days")
                    return part.file_data.file_uri

        print("No video generated in response")
        return None

    except Exception as e:
        print(f"Error generating video: {e}")
        return None


def main():
    """Main function to generate the cat dancing video."""
    try:
        setup_api_key()

        prompt = "video about a cat dancing"

        # Try the standard model first
        video_uri = generate_video(prompt)

        if video_uri:
            print(f"\n✅ Success! Video generated: {video_uri}")
        else:
            print("\n❌ Failed to generate video")

    except ValueError as e:
        print(f"❌ Setup error: {e}")
    except Exception as e:
        print(f"❌ Unexpected error: {e}")


if __name__ == "__main__":
    main()
