import asyncio

from pydantic import BaseModel, Field

from openbrowser import Agent, Browser, ChatBrowserUse


class ProductListing(BaseModel):
	"""A single product listing"""

	title: str = Field(..., description='Product title')
	url: str = Field(..., description='Full URL to listing')
	price: float = Field(..., description='Price as number')
	condition: str | None = Field(None, description='Condition: Used, New, Refurbished, etc')
	source: str = Field(..., description='Source website: Amazon, eBay, or Swappa')


class PriceComparison(BaseModel):
	"""Price comparison results"""

	search_query: str = Field(..., description='The search query used')
	listings: list[ProductListing] = Field(default_factory=list, description='All product listings')


async def find(item: str = 'Used iPhone 12'):
	"""
	Search for an item across multiple marketplaces and compare prices.

	Args:
	    item: The item to search for (e.g., "Used iPhone 12")

	Returns:
	    PriceComparison object with structured results
	"""
	browser = Browser(cdp_url='http://localhost:9222')

	llm = ChatBrowserUse()

	# Task prompt
	task = f"""
    Search for "{item}" on eBay, Amazon, and Swappa. Get any 2-3 listings from each site.

    For each site:
    1. Search for "{item}"
    2. Extract ANY 2-3 listings you find (sponsored, renewed, used - all are fine)
    3. Get: title, price (number only, if range use lower number), source, full URL, condition
    4. Move to next site

    Sites:
    - eBay: https://www.ebay.com/
    - Amazon: https://www.amazon.com/
    - Swappa: https://swappa.com/
    """

	# Create agent with structured output
	agent = Agent(
		browser=browser,
		llm=llm,
		task=task,
		output_model_schema=PriceComparison,
	)

	# Run the agent
	result = await agent.run()
	return result


if __name__ == '__main__':
	# Get user input
	query = input('What item would you like to compare prices for? ').strip()
	if not query:
		query = 'Used iPhone 12'
		print(f'Using default query: {query}')

	result = asyncio.run(find(query))

	# Access structured output
	if result and result.structured_output:
		comparison = result.structured_output

		print(f'\n{"=" * 60}')
		print(f'Price Comparison Results: {comparison.search_query}')
		print(f'{"=" * 60}\n')

		for listing in comparison.listings:
			print(f'Title: {listing.title}')
			print(f'Price: ${listing.price}')
			print(f'Source: {listing.source}')
			print(f'URL: {listing.url}')
			print(f'Condition: {listing.condition or "N/A"}')
			print(f'{"-" * 60}')
