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";

  // Diff stats
  @property({ type: Number })
  diffLinesAdded: number = 0;

  @property({ type: Number })
  diffLinesRemoved: number = 0;

  // 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):not(.diff-stats) {
        display: none;
      }

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

      /* Always show diff stats */
      .diff-stats {
        display: inline !important;
        font-size: 11px;
        margin-left: 2px;
      }
    }

    /* Style for diff stats */
    .diff-stats {
      font-size: 11px;
      margin-left: 4px;
      color: inherit;
      opacity: 0.8;
    }

    .tab-btn.active .diff-stats {
      opacity: 1;
    }

    .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 - ${this.diffLinesAdded > 0 ||
          this.diffLinesRemoved > 0
            ? `+${this.diffLinesAdded} -${this.diffLinesRemoved}`
            : "No changes"}"
          @click=${() => this._handleViewModeClick("diff2")}
        >
          <span class="tab-icon">±</span>
          <span class="diff-text">Diff</span>
          ${this.diffLinesAdded > 0 || this.diffLinesRemoved > 0
            ? html`<span class="diff-stats"
                >+${this.diffLinesAdded} -${this.diffLinesRemoved}</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;
  }
}
