/* eslint-disable @typescript-eslint/no-explicit-any */
import { SketchTimeline } from "./web-components/sketch-timeline";
import { aggregateAgentMessages } from "./web-components/aggregateAgentMessages";
import { State } from "./types";

// Ensure this dependency ends up in the bundle (the "as SketchTimeline" reference below
// is insufficient for the bundler to include it).
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
SketchTimeline;

export function renderMessagesViewer(viewData: any, container: HTMLDivElement) {
  const timelineEl = document.createElement(
    "sketch-timeline",
  ) as SketchTimeline;
  // Filter out hidden messages at the display level (matches sketch behavior)
  const visibleMessages = viewData.Messages.filter(
    (msg: any) => !msg.hide_output,
  );
  const messages = aggregateAgentMessages(visibleMessages, []);
  timelineEl.messages = messages;
  timelineEl.toolCalls = viewData.ToolResults;
  timelineEl.scrollContainer = { value: window.document.body };

  // Create a state object for the timeline component
  // This ensures user attribution works in archived messages
  const sessionWithData = viewData.SessionWithData;
  const state: Partial<State> = {
    session_id: sessionWithData?.session_id || "",
    // Use git_username from session state if available, fallback to UserName field, then extract from session info
    git_username:
      sessionWithData?.session_state?.git_username ||
      sessionWithData?.user_name ||
      extractGitUsername(sessionWithData),
    // Include other relevant state fields that might be available
    git_origin: sessionWithData?.session_state?.git_origin,
  };

  timelineEl.state = state as State;
  container.replaceWith(timelineEl);
}

// Helper function to extract git username from session data
function extractGitUsername(sessionWithData: any): string | undefined {
  // Try to extract from session state first
  if (sessionWithData?.session_state?.git_username) {
    return sessionWithData.session_state.git_username;
  }

  // For older sessions, we might not have git_username stored
  // We could try to extract it from other sources, but for now return undefined
  return undefined;
}

window.globalThis.renderMessagesViewer = renderMessagesViewer;
