from fastapi import APIRouter, Depends
from schemas.search import SearchRequest, SearchResponse
from models.search import SearchModel
from config.database import get_search_collection
from datetime import datetime, timedelta, timezone
from uuid import uuid4
from motor.motor_asyncio import AsyncIOMotorCollection

router = APIRouter()

@router.post("/search", response_model=SearchResponse)
async def create_search(
    request: SearchRequest,
    collection: AsyncIOMotorCollection = Depends(get_search_collection)
):
    search_model = SearchModel(collection)

    search_id = uuid4()
    user_id = uuid4()
    timestamp = datetime.now(timezone.utc)
    estimated_completion = timestamp + timedelta(minutes=2)

    search_doc = {
        "searchId": str(search_id),
        "userId": str(user_id),
        "status": "initiated",
        "message": "Search distributed to 3 platforms",
        "timestamp": timestamp,
        "estimatedCompletion": estimated_completion,
        **request.dict(exclude_unset=True)
    }

    await search_model.save(search_doc)

    return SearchResponse(
        searchId=search_id,
        status="initiated",
        message=f"Search distributed to 3 platforms",
        timestamp=timestamp,
        estimatedCompletion=estimated_completion
    )
