# 26.11.25

# External library
from rich.console import Console
from rich.prompt import Prompt


# Internal utilities
from StreamingCommunity.services._base import site_constants, MediaManager, MediaItem
from StreamingCommunity.utils.http_client import create_client, get_userAgent, check_region_availability
from StreamingCommunity.utils import TVShowManager
from StreamingCommunity.services._base.site_search_manager import base_process_search_result, base_search

# Logic
from .downloader import download_series


# Variable
indice = 15
_useFor = "Serie"
_region = ["IT"]


msg = Prompt()
console = Console()
media_search_manager = MediaManager()
table_show_manager = TVShowManager()


def title_search(query: str) -> int:
    """
    Search for titles based on a search query.
      
    Parameters:
        - query (str): The query to search for.

    Returns:
        int: The number of titles found.
    """
    media_search_manager.clear()
    table_show_manager.clear()

    if not check_region_availability(_region, site_constants.SITE_NAME):
        return 0

    search_url = "https://public.aurora.enhanced.live/site/search/page/"
    console.print(f"[cyan]Search url: [yellow]{search_url}")

    params = {
        'include': 'default',
        'filter[environment]': 'foodnetwork',
        'v': '2',
        'q': query,
        'page[number]': '1',
        'page[size]': '20'
    }

    try:
        response = create_client(headers={'user-agent': get_userAgent()}).get(search_url, params=params)
        response.raise_for_status()
    except Exception as e:
        console.print(f"[red]Site: {site_constants.SITE_NAME}, request search error: {e}")
        return 0

    # Collect json data
    if "data" in response.json().keys():
        data = response.json().get('data')
    else:
        data = response.json()

    for dict_title in data:
        media_search_manager.add(MediaItem(
            name=dict_title.get('title'),
            type='tv',
            year=dict_title.get('dateLastModified').split('-')[0],
            image=dict_title.get('image').get('url'),
            url=f'https://public.aurora.enhanced.live/site/page/{str(dict_title.get("slug")).lower().replace(" ", "-")}/?include=default&filter[environment]=foodnetwork&v=2&parent_slug={dict_title.get("parentSlug")}',
        ))
	
    # Return the number of titles found
    return media_search_manager.get_length()



# WRAPPING FUNCTIONS
def process_search_result(select_title, selections=None):
    """
    Wrapper for the generalized process_search_result function.
    """
    return base_process_search_result(
        select_title=select_title,
        download_film_func=None,
        download_series_func=download_series,
        media_search_manager=media_search_manager,
        table_show_manager=table_show_manager,
        selections=selections
    )

def search(string_to_search: str = None, get_onlyDatabase: bool = False, direct_item: dict = None, selections: dict = None):
    """
    Wrapper for the generalized search function.
    """
    return base_search(
        title_search_func=title_search,
        process_result_func=process_search_result,
        media_search_manager=media_search_manager,
        table_show_manager=table_show_manager,
        site_name=site_constants.SITE_NAME,
        string_to_search=string_to_search,
        get_onlyDatabase=get_onlyDatabase,
        direct_item=direct_item,
        selections=selections
    )