from fastapi import APIRouter
from sqlmodel import Session, select, func

from app.db.session import get_engine
from app.models.core import Idea, JobStatus, PostDraft, PublishJob, Theme, VideoAsset, VideoStatus

router=APIRouter(prefix="/dashboard", tags=["dashboard"])

@router.get("/summary")
def summary():
    with Session(get_engine()) as session:
        videos=session.exec(select(VideoAsset)).all()
        drafts=session.exec(select(PostDraft)).all()
        jobs=session.exec(select(PublishJob)).all()
        topics=session.exec(select(Theme).order_by(Theme.priority.desc(), Theme.created_at.desc())).all()
        ideas=session.exec(select(Idea).order_by(Idea.priority.desc(), Idea.created_at.desc())).all()
        return {
            "ready_for_approval": len([v for v in videos if v.status in {VideoStatus.ready_for_review, VideoStatus.approved}]),
            "needs_metadata": len([v for v in videos if v.status == VideoStatus.needs_metadata]),
            "scheduled_private_uploads": len([d for d in drafts if d.status == "scheduled"]),
            "uploaded_private_or_draft": len([v for v in videos if v.status in {VideoStatus.uploaded_private, VideoStatus.uploaded_draft, VideoStatus.uploaded_to_tiktok_draft}]),
            "failed_actions": len([j for j in jobs if j.status == JobStatus.failed]),
            "ideas_waiting_for_review": len([i for i in ideas if i.status in {"idea", "needs_research"}]),
            "next_topic": topics[0].model_dump(mode="json") if topics else None,
            "recent_packages": [v.model_dump(mode="json") for v in sorted(videos, key=lambda x: x.created_at, reverse=True)[:5]],
            "current_content_pipeline": {
                "ideas": len([i for i in ideas if i.status == "idea"]),
                "approved": len([t for t in topics if t.status == "approved"]),
                "planned": len([t for t in topics if t.status == "planned"]),
                "in_production": len([t for t in topics if t.status == "in_production"]),
                "produced": len([t for t in topics if t.status in {"produced", "reviewed", "uploaded"}]),
            }
        }
