import logging
from datetime import datetime
from typing import Any, Dict, List

from fastapi import HTTPException

from app.v1.services.zerolive.list import get_top_gainer_symbols, get_top_loser_symbols

logger = logging.getLogger(__name__)


def get_market_movers_service(db, mover_type: str, limit: int) -> Dict[str, Any]:
    """Get market movers from Economic Times with debug logging."""
    try:
        logger.info("🔍 FETCHING TOP %s - Starting Economic Times scrape", (mover_type or "").upper())

        # Fetch fresh data from Economic Times
        symbols: List[str]
        if mover_type == "gainers":
            symbols = get_top_gainer_symbols(db)
            logger.info("📈 SCRAPED GAINERS: %s", symbols)
        elif mover_type == "losers":
            symbols = get_top_loser_symbols(db)
            logger.info("📉 SCRAPED LOSERS: %s", symbols)
        else:  # both
            gainers = get_top_gainer_symbols(db)
            losers = get_top_loser_symbols(db)
            symbols = gainers + losers
            logger.info("📊 SCRAPED BOTH - Gainers: %s, Losers: %s", gainers, losers)

        logger.info("✅ FINAL SYMBOLS FOR ANALYSIS: %s", symbols[:limit])

        return {
            "type": mover_type,
            "symbols": symbols[:limit],
            "source": "fallback",
            "timestamp": datetime.utcnow(),
        }

    except Exception as e:
        logger.exception("Failed to get market movers")
        raise HTTPException(status_code=500, detail=f"Market movers error: {str(e)}")
