import { module, test } from "qunit";
import AiPersona from "discourse/plugins/discourse-ai/discourse/admin/models/ai-persona";

module("Discourse AI | Unit | Model | ai-persona", function () {
  test("toPOJO", function (assert) {
    const properties = {
      tools: [
        ["ToolName", { option1: "value1", option2: "value2" }, false],
        "ToolName2",
        "ToolName3",
      ],
    };

    const aiPersonaPOJO = AiPersona.create(properties).toPOJO();

    assert.deepEqual(aiPersonaPOJO.tools, [
      "ToolName",
      "ToolName2",
      "ToolName3",
    ]);
    assert.equal(aiPersonaPOJO.toolOptions["ToolName"].option1, "value1");
    assert.equal(aiPersonaPOJO.toolOptions["ToolName"].option2, "value2");
  });

  test("fromPOJO", function (assert) {
    const properties = {
      id: 1,
      name: "Test",
      tools: [["ToolName", { option1: "value1" }, false]],
      allowed_group_ids: [12],
      system: false,
      enabled: true,
      system_prompt: "System Prompt",
      priority: false,
      description: "Description",
      top_p: 0.8,
      temperature: 0.7,
      default_llm_id: 1,
      force_default_llm: false,
      user: null,
      user_id: null,
      max_context_posts: 5,
      vision_enabled: true,
      vision_max_pixels: 100,
      rag_uploads: [],
      rag_chunk_tokens: 374,
      rag_chunk_overlap_tokens: 10,
      rag_conversation_chunks: 10,
      rag_llm_model_id: 1,
      question_consolidator_llm_id: 2,
      allow_chat: false,
      tool_details: true,
      forced_tool_count: -1,
      allow_personal_messages: true,
      allow_topic_mentions: true,
      allow_chat_channel_mentions: true,
      allow_chat_direct_messages: true,
    };
    const updatedValue = "updated";

    const aiPersona = AiPersona.create({ ...properties });

    const personaPOJO = aiPersona.toPOJO();

    personaPOJO.toolOptions["ToolName"].option1 = updatedValue;
    personaPOJO.forcedTools = "ToolName";

    const updatedPersona = aiPersona.fromPOJO(personaPOJO);

    assert.deepEqual(updatedPersona.tools, [
      ["ToolName", { option1: updatedValue }, true],
    ]);
  });
});
