"""
Supabase client module for fetching video metadata including language info.
"""
from typing import Optional, Dict, Any
from supabase import create_client, Client

from config import SUPABASE_URL, SUPABASE_ADMIN_KEY, LANGUAGE_MAP


class SupabaseVideoClient:
    """Client for fetching video information from Supabase."""
    
    def __init__(self):
        self.client: Client = create_client(SUPABASE_URL, SUPABASE_ADMIN_KEY)
        
    def get_video_info(self, video_id: str) -> Optional[Dict[str, Any]]:
        """
        Fetch video information from Supabase.
        
        Args:
            video_id: YouTube video ID
            
        Returns:
            Dictionary with video info including language, or None if not found
        """
        try:
            # Try different table names that might store video data
            # Adjust table name based on your actual Supabase schema
            tables_to_try = ['videos', 'video_metadata', 'youtube_videos', 'content']
            
            for table in tables_to_try:
                try:
                    response = self.client.table(table).select("*").eq("video_id", video_id).execute()
                    if response.data:
                        return response.data[0]
                except Exception:
                    continue
            
            # Try with 'id' column instead
            for table in tables_to_try:
                try:
                    response = self.client.table(table).select("*").eq("id", video_id).execute()
                    if response.data:
                        return response.data[0]
                except Exception:
                    continue
                    
            return None
            
        except Exception as e:
            print(f"[Supabase] Error fetching video info: {e}")
            return None
    
    def get_video_language(self, video_id: str, default: str = "Telugu") -> str:
        """
        Get the language for a video from Supabase.
        
        Args:
            video_id: YouTube video ID
            default: Default language if not found
            
        Returns:
            Language name (e.g., "Telugu", "Hindi")
        """
        video_info = self.get_video_info(video_id)
        
        if video_info:
            # Try common field names for language
            for field in ['language', 'lang', 'audio_language', 'primary_language']:
                if field in video_info and video_info[field]:
                    lang_code = video_info[field]
                    # Map language code to full name if needed
                    return LANGUAGE_MAP.get(lang_code, lang_code)
        
        print(f"[Supabase] Language not found for {video_id}, using default: {default}")
        return default


def get_video_language(video_id: str, default: str = "Telugu") -> str:
    """
    Convenience function to get video language.
    
    Args:
        video_id: YouTube video ID
        default: Default language if not found
        
    Returns:
        Language name
    """
    client = SupabaseVideoClient()
    return client.get_video_language(video_id, default)


if __name__ == "__main__":
    # Test fetching language for sample video
    test_video_id = "pF_BQpHaIdU"
    language = get_video_language(test_video_id, default="Telugu")
    print(f"Language for {test_video_id}: {language}")
