"""
browserbase integration module 
"""
import asyncio
from typing import List

def browser_base_fetch(api_key: str, project_id: str, link: List[str],
                       text_content: bool = True, async_mode: bool = False) -> List[str]:
    """
    BrowserBase Fetch

    This module provides an interface to the BrowserBase API.

    The `browser_base_fetch` function takes three arguments:
    - `api_key`: The API key provided by BrowserBase.
    - `project_id`: The ID of the project on BrowserBase where you want to fetch data from.
    - `link`: The URL or link that you want to fetch data from.
    - `text_content`: A boolean flag to specify whether to return only the 
        text content (True) or the full HTML (False).
    - `async_mode`: A boolean flag that determines whether the function runs asynchronously 
        (True) or synchronously (False, default).

    It initializes a Browserbase object with the given API key and project ID, 
    then uses this object to load the specified link. 
    It returns the result of the loading operation.

    Example usage:

    ```
    from browser_base_fetch import browser_base_fetch

    result = browser_base_fetch(api_key="your_api_key", 
    project_id="your_project_id", link="https://example.com")
    print(result)
    ```

    Please note that you need to replace "your_api_key" and "your_project_id" 
    with your actual BrowserBase API key and project ID.

    Args:
        api_key (str): The API key provided by BrowserBase.
        project_id (str): The ID of the project on BrowserBase where you want to fetch data from.
        link (str): The URL or link that you want to fetch data from.
        text_content (bool): Whether to return only the text content 
        (True) or the full HTML (False). Defaults to True.
        async_mode (bool): Whether to run the function asynchronously 
        (True) or synchronously (False). Defaults to False.

    Returns:
        object: The result of the loading operation.
    """

    try:
        from browserbase import Browserbase
    except ImportError:
        raise ImportError(f"""The browserbase module is not installed. 
                          Please install it using `pip install browserbase`.""")


    browserbase = Browserbase(api_key=api_key, project_id=project_id)

    result = []
    async def _async_fetch_link(l):
        return await asyncio.to_thread(browserbase.load, l, text_content=text_content)

    if async_mode:
        async def _async_browser_base_fetch():
            for l in link:
                result.append(await _async_fetch_link(l))
            return result

        result = asyncio.run(_async_browser_base_fetch())
    else:
        for l in link:
            result.append(browserbase.load(l, text_content=text_content))


    return result
