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

const demo: DemoModule = {
  title: "Sketch Tool Card Demo",
  description:
    "Demonstration of different tool card components for various tool types",
  imports: [
    "../sketch-tool-card.ts",
    "../sketch-tool-card-about-sketch.ts",
    "../sketch-tool-card-browser-clear-console-logs.ts",
    "../sketch-tool-card-browser-click.ts",
    "../sketch-tool-card-browser-eval.ts",
    "../sketch-tool-card-browser-get-text.ts",
    "../sketch-tool-card-browser-navigate.ts",
    "../sketch-tool-card-browser-recent-console-logs.ts",
    "../sketch-tool-card-browser-resize.ts",
    "../sketch-tool-card-browser-scroll-into-view.ts",
    "../sketch-tool-card-browser-type.ts",
    "../sketch-tool-card-browser-wait-for.ts",
    "../sketch-tool-card-read-image.ts",
    "../sketch-tool-card-take-screenshot.ts",
  ],

  setup: async (container: HTMLElement) => {
    const section = demoUtils.createDemoSection(
      "Tool Card Components",
      "Shows different tool card components for bash, codereview, done, patch, think, title, and multiple-choice tools",
    );

    // Sample tool calls from the original demo
    const toolCalls = [
      {
        name: "multiple-choice",
        input: JSON.stringify({
          question: "What is your favorite programming language?",
          choices: [
            "JavaScript",
            "TypeScript",
            "Python",
            "Go",
            "Rust",
            "Java",
            "C#",
            "C++",
          ],
        }),
        result_message: {
          type: "tool",
          tool_result: JSON.stringify({
            selected: "Go",
          }),
        },
      },
      {
        name: "bash",
        input: JSON.stringify({
          command:
            "docker ps -a --format '{{.ID}} {{.Image }} {{.Names}}' | grep sketch",
          background: true,
          slow_ok: true,
        }),
        result_message: {
          type: "tool",
          tool_result: `Deleted Images:
deleted: sha256:110d4aed8bcc76cb7327412504af8aef31670b816453a3088d834bbeefd11a2c
deleted: sha256:042622460c913078901555a8a72de18e95228fca98b9ac388503b3baafafb683

Total reclaimed space: 1.426GB`,
        },
      },
      {
        name: "bash",
        input: JSON.stringify({
          command: "sleep 200",
          slow_ok: true,
        }),
        result_message: {
          type: "tool",
          tool_error: "the user canceled this operation",
        },
      },
      {
        name: "codereview",
        input: "{}",
        tool_call_id: "toolu_01WT5qQwHZgdogfKhkD8R9PZ",
        result_message: {
          type: "tool",
          end_of_turn: false,
          content: "",
          tool_name: "codereview",
          input: "{}",
          tool_result: "OK",
          tool_call_id: "toolu_01WT5qQwHZgdogfKhkD8R9PZ",
          timestamp: "2025-04-14T16:33:17.575759565Z",
          conversation_id: "xsa-8hw0",
          start_time: "2025-04-14T16:33:07.11793816Z",
          end_time: "2025-04-14T16:33:17.57575719Z",
          elapsed: 10457819031,
          idx: 45,
        },
      },
      {
        name: "think",
        input: JSON.stringify({
          thoughts:
            "I'm going to inspect a few key components to understand their purpose and relationships:\n1. sketch-app-shell.ts - Appears to be the main container component\n2. sketch-timeline.ts - Likely manages the chat timeline\n3. sketch-view-mode-select.ts - Handles switching between different views",
        }),
        tool_call_id: "toolu_01R1g5mQVgKxEJZFNp9QGvUr",
        result_message: {
          type: "tool",
          end_of_turn: false,
          content: "",
          tool_name: "think",
          input: JSON.stringify({
            thoughts:
              "I'm going to inspect a few key components to understand their purpose and relationships",
          }),
          tool_result: "recorded",
          tool_call_id: "toolu_01R1g5mQVgKxEJZFNp9QGvUr",
          timestamp: "2025-04-14T16:32:14.12647133Z",
          conversation_id: "xsa-8hw0",
          start_time: "2025-04-14T16:32:14.126454329Z",
          end_time: "2025-04-14T16:32:14.126468539Z",
          elapsed: 14209,
          idx: 18,
        },
      },
      {
        name: "patch",
        input: JSON.stringify({
          path: "/app/webui/src/web-components/README.md",
          patches: [
            {
              operation: "overwrite",
              newText:
                "# Web Components\n\nThis directory contains custom web components...",
            },
          ],
        }),
        tool_call_id: "toolu_01TNhLX2AWkZwsu2KCLKrpju",
        result_message: {
          type: "tool",
          tool_result: "- Applied all patches\n",
          tool_call_id: "toolu_01TNhLX2AWkZwsu2KCLKrpju",
        },
      },
      {
        name: "title",
        input: JSON.stringify({
          title: "a new title for this sketch",
        }),
      },
      {
        name: "done",
        input: JSON.stringify({
          checklist_items: {
            code_reviewed: {
              status: "yes",
              description:
                "If any commits were made, the codereview tool was run and its output was addressed.",
              comments: "Code review completed successfully",
            },
            git_commit: {
              status: "yes",
              description: "Create git commits for any code changes you made.",
              comments: "All changes committed",
            },
          },
        }),
        tool_call_id: "toolu_01HPgWQJF1aF9LUqkdDKWeES",
        result_message: {
          type: "tool",
          tool_result:
            "codereview tool has not been run for commit 0b1f45dc17fbe7800f5164993ec99d6564256787",
          tool_error: true,
          tool_call_id: "toolu_01HPgWQJF1aF9LUqkdDKWeES",
        },
      },
      // About Sketch tool
      {
        name: "about_sketch",
        input: "{}",
        tool_call_id: "toolu_about_sketch",
        result_message: {
          type: "tool",
          tool_result:
            "# Welcome to Sketch\n\nSketch is an AI-powered coding assistant that helps you implement features, debug issues, and understand codebases.\n\n## Key Features\n\n- **Autonomous coding**: I can read, write, and modify code files\n- **Command execution**: I can run shell commands and scripts\n- **Testing**: I can run tests and interpret results\n- **Code review**: I can analyze code quality and suggest improvements\n\n## Getting Started\n\n1. Describe what you want to build or fix\n2. I'll analyze your codebase and create a plan\n3. I'll implement the changes step by step\n4. You can review and provide feedback at any time",
          tool_call_id: "toolu_about_sketch",
        },
      },
      // Browser navigation
      {
        name: "browser_navigate",
        input: JSON.stringify({ url: "https://example.com" }),
        tool_call_id: "toolu_navigate",
        result_message: {
          type: "tool",
          tool_result: "Navigated to https://example.com",
          tool_call_id: "toolu_navigate",
        },
      },
      // Browser click
      {
        name: "browser_click",
        input: JSON.stringify({ selector: ".login-button" }),
        tool_call_id: "toolu_click",
        result_message: {
          type: "tool",
          tool_result: "Clicked element: .login-button",
          tool_call_id: "toolu_click",
        },
      },
      // Browser type
      {
        name: "browser_type",
        input: JSON.stringify({ selector: "#username", text: "testuser" }),
        tool_call_id: "toolu_type",
        result_message: {
          type: "tool",
          tool_result: "Typed 'testuser' into #username",
          tool_call_id: "toolu_type",
        },
      },
      // Browser get text
      {
        name: "browser_get_text",
        input: JSON.stringify({ selector: ".welcome-message" }),
        tool_call_id: "toolu_get_text",
        result_message: {
          type: "tool",
          tool_result: "Welcome to our application! Please log in to continue.",
          tool_call_id: "toolu_get_text",
        },
      },
      // Browser eval
      {
        name: "browser_eval",
        input: JSON.stringify({ expression: "document.title" }),
        tool_call_id: "toolu_eval",
        result_message: {
          type: "tool",
          tool_result: "Example Domain",
          tool_call_id: "toolu_eval",
        },
      },
      // Browser wait for
      {
        name: "browser_wait_for",
        input: JSON.stringify({ selector: ".loading-complete" }),
        tool_call_id: "toolu_wait",
        result_message: {
          type: "tool",
          tool_result: "Element .loading-complete is now present",
          tool_call_id: "toolu_wait",
        },
      },
      // Browser resize
      {
        name: "browser_resize",
        input: JSON.stringify({ width: 1024, height: 768 }),
        tool_call_id: "toolu_resize",
        result_message: {
          type: "tool",
          tool_result: "Browser resized to 1024x768",
          tool_call_id: "toolu_resize",
        },
      },
      // Browser scroll into view
      {
        name: "browser_scroll_into_view",
        input: JSON.stringify({ selector: "#bottom-section" }),
        tool_call_id: "toolu_scroll",
        result_message: {
          type: "tool",
          tool_result: "Scrolled element #bottom-section into view",
          tool_call_id: "toolu_scroll",
        },
      },
      // Browser clear console logs
      {
        name: "browser_clear_console_logs",
        input: "{}",
        tool_call_id: "toolu_clear_logs",
        result_message: {
          type: "tool",
          tool_result: "Console logs cleared",
          tool_call_id: "toolu_clear_logs",
        },
      },
      // Browser recent console logs
      {
        name: "browser_recent_console_logs",
        input: "{}",
        tool_call_id: "toolu_recent_logs",
        result_message: {
          type: "tool",
          tool_result:
            "[INFO] Page loaded successfully\n[WARN] Deprecated API usage detected\n[ERROR] Failed to load resource: net::ERR_FAILED",
          tool_call_id: "toolu_recent_logs",
        },
      },
      // Read image
      {
        name: "read_image",
        input: JSON.stringify({ path: "/tmp/screenshot.png" }),
        tool_call_id: "toolu_read_image",
        result_message: {
          type: "tool",
          tool_result:
            "Image read successfully: /tmp/screenshot.png (1024x768, 245KB)",
          tool_call_id: "toolu_read_image",
        },
      },
      // Take screenshot
      {
        name: "browser_take_screenshot",
        input: JSON.stringify({ selector: ".main-content" }),
        tool_call_id: "toolu_screenshot",
        result_message: {
          type: "tool",
          tool_result:
            "Screenshot taken (saved as /tmp/sketch-screenshots/demo-123.png)",
          tool_call_id: "toolu_screenshot",
        },
      },
    ];

    // Create tool cards for each tool call
    toolCalls.forEach((toolCall) => {
      const toolSection = document.createElement("div");
      toolSection.style.marginBottom = "2rem";
      toolSection.style.border = "1px solid #eee";
      toolSection.style.borderRadius = "8px";
      toolSection.style.padding = "1rem";

      const header = document.createElement("h3");
      header.textContent = `Tool: ${toolCall.name}`;
      header.style.marginTop = "0";
      header.style.marginBottom = "1rem";
      header.style.color = "#333";
      toolSection.appendChild(header);

      // Create the appropriate tool card element
      let toolCardEl;
      switch (toolCall.name) {
        case "bash":
          toolCardEl = document.createElement("sketch-tool-card-bash");
          break;
        case "codereview":
          toolCardEl = document.createElement("sketch-tool-card-codereview");
          break;
        case "done":
          toolCardEl = document.createElement("sketch-tool-card-done");
          break;
        case "patch":
          toolCardEl = document.createElement("sketch-tool-card-patch");
          break;
        case "think":
          toolCardEl = document.createElement("sketch-tool-card-think");
          break;
        case "title":
          toolCardEl = document.createElement("sketch-tool-card-title");
          break;
        case "multiple-choice":
          toolCardEl = document.createElement(
            "sketch-tool-card-multiple-choice",
          );
          break;
        case "about_sketch":
          toolCardEl = document.createElement("sketch-tool-card-about-sketch");
          break;
        case "browser_navigate":
          toolCardEl = document.createElement(
            "sketch-tool-card-browser-navigate",
          );
          break;
        case "browser_click":
          toolCardEl = document.createElement("sketch-tool-card-browser-click");
          break;
        case "browser_type":
          toolCardEl = document.createElement("sketch-tool-card-browser-type");
          break;
        case "browser_get_text":
          toolCardEl = document.createElement(
            "sketch-tool-card-browser-get-text",
          );
          break;
        case "browser_eval":
          toolCardEl = document.createElement("sketch-tool-card-browser-eval");
          break;
        case "browser_wait_for":
          toolCardEl = document.createElement(
            "sketch-tool-card-browser-wait-for",
          );
          break;
        case "browser_resize":
          toolCardEl = document.createElement(
            "sketch-tool-card-browser-resize",
          );
          break;
        case "browser_scroll_into_view":
          toolCardEl = document.createElement(
            "sketch-tool-card-browser-scroll-into-view",
          );
          break;
        case "browser_clear_console_logs":
          toolCardEl = document.createElement(
            "sketch-tool-card-browser-clear-console-logs",
          );
          break;
        case "browser_recent_console_logs":
          toolCardEl = document.createElement(
            "sketch-tool-card-browser-recent-console-logs",
          );
          break;
        case "read_image":
          toolCardEl = document.createElement("sketch-tool-card-read-image");
          break;
        case "browser_take_screenshot":
          toolCardEl = document.createElement(
            "sketch-tool-card-take-screenshot",
          );
          break;
        default:
          toolCardEl = document.createElement("sketch-tool-card-generic");
          break;
      }

      toolCardEl.toolCall = toolCall;
      toolCardEl.open = true;

      toolSection.appendChild(toolCardEl);
      section.appendChild(toolSection);
    });

    container.appendChild(section);
  },
};

export default demo;
