/**
 * Demo module for sketch-tool-calls component
 */

import { DemoModule } from "./demo-framework/types";
import {
  demoUtils,
  sampleToolCalls,
  multipleToolCallGroups,
  longBashCommand,
} from "./demo-fixtures/index";

const demo: DemoModule = {
  title: "Tool Calls Demo",
  description: "Interactive tool call display with various tool types",
  imports: ["../sketch-tool-calls"],

  setup: async (container: HTMLElement) => {
    // Create demo sections
    const basicSection = demoUtils.createDemoSection(
      "Basic Tool Calls",
      "Various types of tool calls with results",
    );

    const interactiveSection = demoUtils.createDemoSection(
      "Interactive Examples",
      "Tool calls that can be modified and updated",
    );

    const groupsSection = demoUtils.createDemoSection(
      "Tool Call Groups",
      "Multiple tool calls grouped together",
    );

    // Basic tool calls component
    const basicToolCalls = document.createElement("sketch-tool-calls") as any;
    basicToolCalls.toolCalls = sampleToolCalls.slice(0, 3);

    // Interactive tool calls component
    const interactiveToolCalls = document.createElement(
      "sketch-tool-calls",
    ) as any;
    interactiveToolCalls.toolCalls = [sampleToolCalls[0]];

    // Control buttons for interaction
    const controlsDiv = document.createElement("div");
    controlsDiv.style.cssText = "margin-top: 15px;";

    const addBashButton = demoUtils.createButton("Add Bash Command", () => {
      const currentCalls = interactiveToolCalls.toolCalls || [];
      interactiveToolCalls.toolCalls = [...currentCalls, sampleToolCalls[2]];
    });

    const addLongCommandButton = demoUtils.createButton(
      "Add Long Command",
      () => {
        const currentCalls = interactiveToolCalls.toolCalls || [];
        interactiveToolCalls.toolCalls = [...currentCalls, longBashCommand];
      },
    );

    const clearButton = demoUtils.createButton("Clear Tool Calls", () => {
      interactiveToolCalls.toolCalls = [];
    });

    const resetButton = demoUtils.createButton("Reset to Default", () => {
      interactiveToolCalls.toolCalls = [sampleToolCalls[0]];
    });

    controlsDiv.appendChild(addBashButton);
    controlsDiv.appendChild(addLongCommandButton);
    controlsDiv.appendChild(clearButton);
    controlsDiv.appendChild(resetButton);

    // Tool call groups
    const groupsContainer = document.createElement("div");
    multipleToolCallGroups.forEach((group, index) => {
      const groupHeader = document.createElement("h4");
      groupHeader.textContent = `Group ${index + 1}`;
      groupHeader.style.cssText = "margin: 20px 0 10px 0; color: #24292f;";

      const groupToolCalls = document.createElement("sketch-tool-calls") as any;
      groupToolCalls.toolCalls = group;

      groupsContainer.appendChild(groupHeader);
      groupsContainer.appendChild(groupToolCalls);
    });

    // Progressive loading demo
    const progressiveSection = demoUtils.createDemoSection(
      "Progressive Loading Demo",
      "Tool calls that appear one by one",
    );

    const progressiveToolCalls = document.createElement(
      "sketch-tool-calls",
    ) as any;
    progressiveToolCalls.toolCalls = [];

    const startProgressiveButton = demoUtils.createButton(
      "Start Progressive Load",
      async () => {
        progressiveToolCalls.toolCalls = [];

        for (let i = 0; i < sampleToolCalls.length; i++) {
          await demoUtils.delay(1000);
          const currentCalls = progressiveToolCalls.toolCalls || [];
          progressiveToolCalls.toolCalls = [
            ...currentCalls,
            sampleToolCalls[i],
          ];
        }
      },
    );

    const progressiveControls = document.createElement("div");
    progressiveControls.style.cssText = "margin-top: 15px;";
    progressiveControls.appendChild(startProgressiveButton);

    // Assemble the demo
    basicSection.appendChild(basicToolCalls);

    interactiveSection.appendChild(interactiveToolCalls);
    interactiveSection.appendChild(controlsDiv);

    groupsSection.appendChild(groupsContainer);

    progressiveSection.appendChild(progressiveToolCalls);
    progressiveSection.appendChild(progressiveControls);

    container.appendChild(basicSection);
    container.appendChild(interactiveSection);
    container.appendChild(groupsSection);
    container.appendChild(progressiveSection);
  },
};

export default demo;
