from fastapi import APIRouter, HTTPException from typing import Optional from pydantic import BaseModel from app.services.marketing import MarketingService from app.core.security import decode_token from app.config import settings router = APIRouter() class MarketingRequest(BaseModel): product_name: str description: str category: Optional[str] = None price: Optional[str] = None keywords: Optional[list] = None target: str = "US importers" style: str = "professional" language: str = "en" count: int = 3 class KeywordsRequest(BaseModel): product_name: str description: str category: Optional[str] = None language: str = "en" count: int = 10 class CompetitorRequest(BaseModel): product_name: str description: str category: Optional[str] = None market: str = "US" @router.post("/generate") async def generate_marketing(data: MarketingRequest, authorization: str = None): if not authorization: raise HTTPException(status_code=401, detail="Missing token") service = MarketingService() product_info = { "name": data.product_name, "description": data.description, "category": data.category, "price": data.price, "keywords": data.keywords, } results = await service.generate(product_info, data.target, data.style, data.language, data.count) return { "results": results, "product": data.product_name, "target": data.target, "count": len(results), } @router.post("/keywords") async def generate_keywords(data: KeywordsRequest, authorization: str = None): if not authorization: raise HTTPException(status_code=401, detail="Missing token") service = MarketingService() product_info = { "name": data.product_name, "description": data.description, "category": data.category, } keywords = await service.generate_keywords(product_info, data.language, data.count) return {"keywords": keywords, "product": data.product_name} @router.post("/competitor-analysis") async def competitor_analysis(data: CompetitorRequest, authorization: str = None): if not authorization: raise HTTPException(status_code=401, detail="Missing token") service = MarketingService() product_info = { "name": data.product_name, "description": data.description, "category": data.category, } analysis = await service.analyze_competitors(product_info, data.market) return {"analysis": analysis, "product": data.product_name, "market": data.market}