import asyncio
import requests
from bs4 import BeautifulSoup
from typing import Type, Any
from pydantic import BaseModel, PrivateAttr
from langchain.tools import BaseTool
from langchain_core.messages import HumanMessage

class SiteIncelemeToolInput(BaseModel):
    url: str

class SiteIncelemeTool(BaseTool):
    name: str = "site_incele_ve_ozetle"
    description: str = "Verilen URL'deki sayfa içeriğini çeker ve özetler."
    args_schema: type[BaseModel] = SiteIncelemeToolInput
    _agent: Any = PrivateAttr()

    def __init__(self, agent):
        super().__init__()
        self._agent = agent

    async def _arun(self, *, url: str) -> str:
        try:
            res = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=5)
            soup = BeautifulSoup(res.text, "html.parser")
            metin = " ".join([p.get_text() for p in soup.find_all("p")])
            if not metin:
                return "Sayfa içeriği bulunamadı."
            prompt = f"Aşağıdaki metni kısa ve anlaşılır şekilde özetle:\n{metin}"
            user_msg = HumanMessage(content=prompt)
            async for event in self._agent.astream({"messages": [user_msg]}):
                return event["messages"][-1].content
        except Exception as e:
            return f"Site inceleme sırasında hata oluştu: {e}"
    
    def _run(self,url: str) -> str:
        return asyncio.run(self._arun(url))