import { html } from "lit";
import { customElement } from "lit/decorators.js";
import { SketchTailwindElement } from "./sketch-tailwind-element.js";

/**
 * A component that displays helpful information when the diff view is empty
 */
@customElement("sketch-diff-empty-view")
export class SketchDiffEmptyView extends SketchTailwindElement {
  render() {
    return html`
      <div
        class="flex flex-col items-center justify-center h-full w-full box-border"
      >
        <div
          class="m-8 mx-auto max-w-4xl w-11/12 p-8 border-2 border-gray-300 rounded-lg shadow-sm bg-white text-center"
        >
          <h2 class="text-2xl font-semibold mb-6 text-center text-gray-800">
            How to use the Diff View
          </h2>

          <p class="text-gray-600 leading-relaxed text-base text-left mb-4">
            By default, the diff view shows differences between when you started
            Sketch (the "sketch-base" tag) and the current state. Choose a
            commit to look at, or, a range of commits, and navigate across
            files.
          </p>

          <p class="text-gray-600 leading-relaxed text-base text-left mb-4">
            You can select text to leave comments on the code. These will be
            added to your chat window, and you can click Send to send them along
            to the agent, which will respond in the chat window.
          </p>

          <p class="text-gray-600 leading-relaxed text-base text-left mb-4">
            If the range includes
            <strong class="font-semibold text-gray-800"
              >Uncommitted Changes</strong
            >, you can
            <strong class="font-semibold text-gray-800">edit</strong> the text
            as well, and it auto-saves. If you want to clear up a comment or
            write your own text, just go ahead and do it! Once you're done,
            though, be sure to commit your changes, either by asking the agent
            to do so or in the Terminal view.
          </p>
        </div>
      </div>
    `;
  }
}

declare global {
  interface HTMLElementTagNameMap {
    "sketch-diff-empty-view": SketchDiffEmptyView;
  }
}
