import requests
from sqlalchemy.orm import Session

from danswer.db.models import User


def test_create_chat_session_and_send_messages(db_session: Session) -> None:
    # Create a test user
    test_user = User(email="test@example.com", hashed_password="dummy_hash")
    db_session.add(test_user)
    db_session.commit()

    base_url = "http://localhost:8080"  # Adjust this to your API's base URL
    headers = {"Authorization": f"Bearer {test_user.id}"}

    # Create a new chat session
    create_session_response = requests.post(
        f"{base_url}/chat/create-chat-session",
        json={
            "description": "Test Chat",
            "persona_id": 1,
        },  # Assuming persona_id 1 exists
        headers=headers,
    )
    assert create_session_response.status_code == 200
    chat_session_id = create_session_response.json()["chat_session_id"]

    # Send first message
    first_message = "Hello, this is a test message."
    send_message_response = requests.post(
        f"{base_url}/chat/send-message",
        json={
            "chat_session_id": chat_session_id,
            "message": first_message,
            "prompt_id": None,
            "retrieval_options": {"top_k": 3},
            "stream_response": False,
        },
        headers=headers,
    )
    assert send_message_response.status_code == 200

    # Send second message
    second_message = "Can you provide more information?"
    send_message_response = requests.post(
        f"{base_url}/chat/send-message",
        json={
            "chat_session_id": chat_session_id,
            "message": second_message,
            "prompt_id": None,
            "retrieval_options": {"top_k": 3},
            "stream_response": False,
        },
        headers=headers,
    )
    assert send_message_response.status_code == 200

    # Verify chat session details
    get_session_response = requests.get(
        f"{base_url}/chat/get-chat-session/{chat_session_id}", headers=headers
    )
    assert get_session_response.status_code == 200
    session_details = get_session_response.json()
    assert session_details["chat_session_id"] == chat_session_id
    assert session_details["description"] == "Test Chat"
    assert len(session_details["messages"]) == 4  # 2 user messages + 2 AI responses
