from app.models import Chat
from app.database import get_db
from sqlalchemy.orm import Session
from app.schemas import ChatRequest
from fastapi import Depends, HTTPException
from app.models import User
from collections import defaultdict

def save_chat(user_message: str, bot_replay: str, current_user: User, db: Session):
    new_chat = Chat(
        user_id=current_user.id,
        user_message=user_message,
        bot_reply=bot_replay,
    )
    db.add(new_chat)
    db.commit()
    db.refresh(new_chat)
    return {"status": "success", "chat_id": new_chat.id}

def getUserChat(current_user: User, db: Session):

    try:
        chat_data = db.query(Chat).filter(Chat.user_id == current_user.id).order_by(Chat.created_at.asc()).all()

        grouped_chats =  defaultdict(list)

        for row in chat_data:
            date_key = row.created_at.strftime('%d %b %Y')

            if row.user_message:
                grouped_chats[date_key].append({"user_message": row.user_message})
            if row.bot_reply:
                grouped_chats[date_key].append({"bot_reply": row.bot_reply})

        data = []
        for date, messages in grouped_chats.items():
            data.append({
                "created_date" : date,
                "messages" : messages
            })

        return {
            "status": True,
            "data": data
        }
    except Exception as e:
        raise HTTPException(status_code=500, detail={
            "status": False,
            "message": "Something went wrong.",
            "errors": str(e)
        })
