import { css, html, LitElement } from "lit";
import { customElement, property } from "lit/decorators.js";
import "./sketch-container-status";

@customElement("sketch-view-mode-select")
export class SketchViewModeSelect extends LitElement {
  // Current active mode
  @property()
  activeMode: "chat" | "diff2" | "terminal" = "chat";
  // Header bar: view mode buttons

  static styles = css`
    /* Tab-style View Mode Styles */
    .tab-nav {
      display: flex;
      margin-right: 10px;
      background-color: #f8f8f8;
      border-radius: 4px;
      overflow: hidden;
      border: 1px solid #ddd;
    }

    .tab-btn {
      padding: 8px 12px;
      background: none;
      border: none;
      cursor: pointer;
      font-size: 13px;
      display: flex;
      align-items: center;
      gap: 5px;
      color: #666;
      border-bottom: 2px solid transparent;
      transition: all 0.2s ease;
      white-space: nowrap;
    }

    @media (max-width: 1400px) {
      .tab-btn span:not(.tab-icon) {
        display: none;
      }

      .tab-btn {
        padding: 8px 10px;
      }
    }

    .tab-btn:not(:last-child) {
      border-right: 1px solid #eee;
    }

    .tab-btn:hover {
      background-color: #f0f0f0;
    }

    .tab-btn.active {
      border-bottom: 2px solid #4a90e2;
      color: #4a90e2;
      font-weight: 500;
      background-color: #e6f7ff;
    }

    .tab-icon {
      font-size: 16px;
    }
  `;

  constructor() {
    super();

    // Binding methods
    this._handleViewModeClick = this._handleViewModeClick.bind(this);
    this._handleUpdateActiveMode = this._handleUpdateActiveMode.bind(this);
  }

  // See https://lit.dev/docs/components/lifecycle/
  connectedCallback() {
    super.connectedCallback();

    // Listen for update-active-mode events
    this.addEventListener(
      "update-active-mode",
      this._handleUpdateActiveMode as EventListener,
    );
  }

  /**
   * Handle view mode button clicks
   */
  private _handleViewModeClick(mode: "chat" | "diff2" | "terminal") {
    // Dispatch a custom event to notify the app shell to change the view
    const event = new CustomEvent("view-mode-select", {
      detail: { mode },
      bubbles: true,
      composed: true,
    });
    this.dispatchEvent(event);
  }

  /**
   * Handle updates to the active mode
   */
  private _handleUpdateActiveMode(event: CustomEvent) {
    const { mode } = event.detail;
    if (mode) {
      this.activeMode = mode;
    }
  }

  // See https://lit.dev/docs/components/lifecycle/
  disconnectedCallback() {
    super.disconnectedCallback();

    // Remove event listeners
    this.removeEventListener(
      "update-active-mode",
      this._handleUpdateActiveMode as EventListener,
    );
  }

  render() {
    return html`
      <div class="tab-nav">
        <button
          id="showConversationButton"
          class="tab-btn ${this.activeMode === "chat" ? "active" : ""}"
          title="Conversation View"
          @click=${() => this._handleViewModeClick("chat")}
        >
          <span class="tab-icon">💬</span>
          <span>Chat</span>
        </button>
        <button
          id="showDiff2Button"
          class="tab-btn ${this.activeMode === "diff2" ? "active" : ""}"
          title="Diff View"
          @click=${() => this._handleViewModeClick("diff2")}
        >
          <span class="tab-icon">±</span>
          <span>Diff</span>
        </button>

        <button
          id="showTerminalButton"
          class="tab-btn ${this.activeMode === "terminal" ? "active" : ""}"
          title="Terminal View"
          @click=${() => this._handleViewModeClick("terminal")}
        >
          <span class="tab-icon">💻</span>
          <span>Terminal</span>
        </button>
      </div>
    `;
  }
}

declare global {
  interface HTMLElementTagNameMap {
    "sketch-view-mode-select": SketchViewModeSelect;
  }
}
