from pydantic import BaseModel from typing import Optional from src.skills.roi_calculator import calculate_roi class ProductIdea(BaseModel): id: str source_url: str sales_volume: int est_total_cost_cny: float recommended_retail_price_usd: float roi_score: Optional[float] = None status: str = "SCRAPED" def process_sourcing_event(data: dict) -> dict: idea = ProductIdea( id=data["productIdeaId"], source_url=data["sourceUrl"], sales_volume=data.get("salesVolume", 0), est_total_cost_cny=data["priceCny"], recommended_retail_price_usd=data["retailPriceUsd"], ) roi_result = calculate_roi( price_cny=data["priceCny"], length_cm=data["lengthCm"], width_cm=data["widthCm"], height_cm=data["heightCm"], actual_weight_kg=data["actualWeightKg"], retail_price_usd=data["retailPriceUsd"] ) idea.roi_score = roi_result.roi_percentage if roi_result.passed_threshold: idea.status = "SELECTED" else: idea.status = "DISCARDED" # TODO: Connect to Supabase via SQLModel to persist the state return { "Status": "🟢 Success", "Generated_Artifacts": idea.model_dump(), "Confidence_Score": 100, "Next_Agent_Suggestion": "content-agent" if idea.status == "SELECTED" else "end_of_workflow", "roi_breakdown": roi_result.breakdown }