
import logging
from typing import List, Optional
from fastapi import APIRouter, Depends, HTTPException, status, Query
from app.usecases.create_news_response import NewsService
from app.entities.search_response import NewsResponse,SearchResponse
from app.repos.mongodb_repo import NewsRepository
from app.web.dependencies import get_news_repository
from datetime import datetime

logger = logging.getLogger(__name__)


api_router = APIRouter(prefix="/news", tags=["news"])

@api_router.get("/list", response_model=List[SearchResponse])
async def get_news(repo: NewsRepository = Depends(get_news_repository)):
    data = await repo.list_news_batch()
    # Optional: Convert MongoDB documents (_id) to dicts without ObjectId
    for item in data:
        item["_id"] = str(item["_id"])
    return data


@api_router.get("/filter", response_model=List[SearchResponse])
async def get_news(
    title: Optional[str] = Query(None),
    source_name: Optional[str] = Query(None),
    author: Optional[str] = Query(None),
    from_date: Optional[datetime] = Query(None),
    to_date: Optional[datetime] = Query(None),
    repo: NewsRepository = Depends(get_news_repository)
):
    filters = {}

    if title:
        filters["title"] = {"$regex": title, "$options": "i"}  # case-insensitive
    if source_name:
        filters["source_name"] = {"$regex": source_name, "$options": "i"}
    if author:
        filters["authors"] = author
    if from_date or to_date:
        filters["published_datetime_utc"] = {}
        if from_date:
            filters["published_datetime_utc"]["$gte"] = from_date
        if to_date:
            filters["published_datetime_utc"]["$lte"] = to_date

    data = await repo.list_news_filtered(filters)
    for item in data:
        item["_id"] = str(item["_id"])
    return data