use crate::{TestContext, collect_stream, load_asset_content};
use uuid::Uuid;

#[tokio::test]
async fn local_ollama_test_context_related_questions() {
  let context = TestContext::new().unwrap();
  let mut chat = context.create_chat(vec![]).await;
  let stream = chat
    .stream_question("hello world", Default::default())
    .await
    .unwrap();
  let result = collect_stream(stream).await;
  assert!(!result.answer.is_empty());

  let doc_id = Uuid::new_v4().to_string();
  let trip_docs = load_asset_content("japan_trip.md");
  chat.set_rag_ids(vec![doc_id.clone()]);
  chat
    .embed_paragraphs(&doc_id, vec![trip_docs])
    .await
    .unwrap();

  let stream = chat
    .stream_question("Compare rust with js", Default::default())
    .await
    .unwrap();
  let result = collect_stream(stream).await;
  dbg!(&result.suggested_questions);
  assert_eq!(result.suggested_questions.len(), 3);
  assert!(!result.gen_related_question);

  // all suggested questions' object id should equal to doc_id
  for question in result.suggested_questions.iter() {
    assert_eq!(question.object_id, doc_id);
  }

  let stream = chat
    .stream_question(
      result.suggested_questions[0].content.as_str(),
      Default::default(),
    )
    .await
    .unwrap();
  let result = collect_stream(stream).await;
  dbg!(&result);
  assert!(result.suggested_questions.is_empty());
  assert!(result.gen_related_question);
}
