#[cfg(not(target_arch = "wasm32"))]
use nightrunner_lib::{parser::interpreter::MessageParts, NightRunnerBuilder, ParsingResult};
#[cfg(test)]
#[cfg(not(target_arch = "wasm32"))]
use pretty_assertions::assert_eq;
#[cfg(not(target_arch = "wasm32"))]
use std::collections::HashMap;
#[test]
#[cfg(not(target_arch = "wasm32"))]
fn it_works_with_path_to_configs() {
    let mut nr = NightRunnerBuilder::new()
        .with_path_for_config("fixtures/")
        .build()
        .unwrap();

    let result = nr.parse_input("look");
    assert_eq!(
        result.unwrap(),
        ParsingResult::Look(
            "first room\n\nHere you see: \nan item1\nan item2\nsubject1".to_string()
        )
    );

    let result_json = nr.json_parse_input("look");
    assert_eq!(
        result_json,
        r#"{"messageType":"look","data":"first room\n\nHere you see: \nan item1\nan item2\nsubject1"}"#
    );
}
#[test]
#[cfg(not(target_arch = "wasm32"))]
fn it_works_with_json_data() {
    use nightrunner_lib::parser::interpreter::EventMessage;
    let data = nightrunner_lib::util::test_helpers::mock_json_data();
    let mut nr = NightRunnerBuilder::new()
        .with_json_data(&data)
        .build()
        .unwrap();
    let mut message_parts = HashMap::new();

    message_parts.insert(
        MessageParts::RoomText,
        "this is a templated which exists in the game item3.\n\nthis is a templated subject that exists in the game subject2.".to_string(),
    );
    message_parts.insert(MessageParts::EventText, "".to_string());
    message_parts.insert(
        MessageParts::Exits,
        "Exits:\nto the north you see first room".to_string(),
    );
    let mut result = nr.parse_input("look");
    assert_eq!(
        result.unwrap(),
        ParsingResult::Look(
            "first room\n\nHere you see: \nan item1\nan item2\nsubject1".to_string()
        )
    );
    result = nr.parse_input("south");
    assert_eq!(
        result.unwrap(),
        ParsingResult::EventSuccess(
                    EventMessage {
                        message: "this is a templated which exists in the game item3.\n\nthis is a templated subject that exists in the game subject2.\n\n\nExits:\nto the north you see first room".to_string(),
                        templated_words: vec!["item3".to_string(), "subject2".to_string()],
                        message_parts: message_parts.clone()
                    })
    );
    result = nr.parse_input("look");
    assert_eq!(
        result.unwrap(),
        ParsingResult::Look("second room\n\nHere you see: \nan item3\nsubject2".to_string())
    );
    result = nr.parse_input("talk subject2");
    message_parts.insert(
        MessageParts::RoomText,
        "this is a templated which exists in the game item3.\n\nthis is a templated subject that exists in the game subject2.\n\nthis narrative should be returned along with the text of room 1.".to_string(),
    );
    message_parts.insert(
        MessageParts::EventText,
        "\nYou now have a item2".to_string(),
    );
    assert_eq!(
        result.unwrap(),
        ParsingResult::EventSuccess(
                    EventMessage {
                        message: "this is a templated which exists in the game item3.\n\nthis is a templated subject that exists in the game subject2.\n\nthis narrative should be returned along with the text of room 1.\n\nYou now have a item2\n\nExits:\nto the north you see first room".to_string(),
                        templated_words: vec!["item3".to_string(), "subject2".to_string()],
                        message_parts: message_parts.clone()
                    })
    );
    result = nr.parse_input("give item2 subject1");
    message_parts.insert(
        MessageParts::RoomText,
        "text\n\nthis narrative should be returned along with the text of room 1.".to_string(),
    );
    message_parts.insert(
        MessageParts::EventText,
        "\nYou no longer have a item2".to_string(),
    );
    message_parts.insert(
        MessageParts::Exits,
        "Exits:\nto the south you see second room".to_string(),
    );
    assert_eq!(
        result.unwrap(),
        ParsingResult::EventSuccess(
                    EventMessage {
                        message: "text\n\nthis narrative should be returned along with the text of room 1.\n\nYou no longer have a item2\n\nExits:\nto the south you see second room".to_string(),
                        templated_words: vec![],
                        message_parts
                    })
    );

    let result_json = nr.json_parse_input("look");
    assert_eq!(
        result_json,
        r#"{"messageType":"look","data":"first room\n\nHere you see: \nan item1\nan item2\nsubject1"}"#
    );
}
