
from playwright.async_api import async_playwright
from langchain_community.agent_toolkits import PlayWrightBrowserToolkit
from dotenv import load_dotenv
import os
import requests
from langchain.agents import Tool
from langchain_community.agent_toolkits import FileManagementToolkit
from langchain_community.tools.wikipedia.tool import WikipediaQueryRun
from langchain_experimental.tools import PythonREPLTool
from langchain_community.utilities import GoogleSerperAPIWrapper
from langchain_community.utilities.wikipedia import WikipediaAPIWrapper
import sqlite3   

load_dotenv(override=True)

pushover_token = os.getenv("PUSHOVER_TOKEN")
pushover_user = os.getenv("PUSHOVER_USER")
pushover_url = "https://api.pushover.net/1/messages.json"

serper = GoogleSerperAPIWrapper()


async def playwright_tools():
    playwright = await async_playwright().start()
    browser = await playwright.chromium.launch(headless=False)
    toolkit = PlayWrightBrowserToolkit.from_browser(async_browser=browser)
    return toolkit.get_tools(), browser, playwright


def push(text: str):
    # Send a push notification
    requests.post(pushover_url, data={
        "token": pushover_token,
        "user": pushover_user,
        "message": text
    })
    return "success"


def get_file_tools():
    toolkit = FileManagementToolkit(root_dir="sandbox")
    return toolkit.get_tools()

def generate_sql_report(query: str):
    return f"[REPORT GENERATED]: {query}"

def query_memory_db(query: str):
    try:
        conn = sqlite3.connect("memory.db")
        cursor = conn.cursor()
        cursor.execute(query)
        results = cursor.fetchall()
        conn.close()
        return str(results)
    except Exception as e:
        return f"SQL Error: {str(e)}"


async def other_tools():
    push_tool = Tool(
        name="send_push_notification",
        func=push,
        description="Send a push notification to the user"
    )

    file_tools = get_file_tools()

    search_tool = Tool(
        name="search",
        func=serper.run,
        description="Search the internet for information"
    )

    wikipedia = WikipediaAPIWrapper()
    wiki_tool = WikipediaQueryRun(api_wrapper=wikipedia)

    python_repl = PythonREPLTool()

    report_tool = Tool(
        name="generate_report",
        func=generate_sql_report,
        description="Generate business or SQL-style reports"
    )

    sql_tool = Tool(
        name="sql_query",
        func=query_memory_db,
        description="Query the memory database using SQL"
    )

    return file_tools + [
        push_tool,
        search_tool,
        python_repl,
        wiki_tool,
        report_tool,
        sql_tool
    ]
