#[cfg(test)]
mod tests {
    use super::*;
    use crate::repository::{MessageRepository, RoomRepository};
    use sqlx::PgPool;
    use uuid::Uuid;

    async fn setup_test_db() -> PgPool {
        // Pour les tests, utiliser une base de données de test
        // Cette fonction doit être implémentée selon votre configuration de test
        let database_url =
            std::env::var("DATABASE_URL").expect("DATABASE_URL must be set for tests");

        sqlx::PgPool::connect(&database_url)
            .await
            .expect("Failed to connect to test database")
    }

    #[tokio::test]
    #[ignore] // Ignorer par défaut car nécessite une DB de test
    async fn test_create_message() {
        let pool = setup_test_db().await;
        let repo = MessageRepository::new(pool.clone());

        // Créer d'abord une room de test
        let room_repo = RoomRepository::new(pool.clone());
        let creator_id = Uuid::new_v4();

        // Créer la room
        let room = room_repo
            .create(
                Some("Test Room"),
                Some("Test Description"),
                "public",
                false,
                creator_id,
            )
            .await
            .expect("Failed to create room");

        let sender_id = creator_id;
        let message = repo
            .create(room.id, sender_id, "Hello world")
            .await
            .unwrap();

        assert_eq!(message.content, "Hello world");
        assert!(matches!(
            message.message_type,
            crate::models::MessageType::Text
        ));
    }

    #[tokio::test]
    #[ignore] // Ignorer par défaut car nécessite une DB de test
    async fn test_get_room_messages() {
        let pool = setup_test_db().await;
        let repo = MessageRepository::new(pool.clone());

        // Créer une room d'abord
        let room_repo = RoomRepository::new(pool.clone());
        let creator_id = Uuid::new_v4();
        let room = room_repo
            .create(Some("Test Room"), None, "public", false, creator_id)
            .await
            .expect("Failed to create room");

        let sender_id = creator_id;
        repo.create(room.id, sender_id, "Message 1").await.unwrap();
        repo.create(room.id, sender_id, "Message 2").await.unwrap();

        let messages = repo.get_room_messages(room.id, 10).await.unwrap();
        assert_eq!(messages.len(), 2);
    }
}
