/**
 * @license
 * Copyright 2021 The Go Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style
 * license that can be found in the LICENSE file.
 */

/**
 * This class decorates an element to copy arbitrary data attached via a data-
 * attribute to the clipboard.
 */
export class ClipboardController {
  /**
   * The data to be copied to the clipboard.
   */
  private data: string;

  /**
   * @param el The element that will trigger copying text to the clipboard. The text is
   * expected to be within its data-to-copy attribute.
   */
  constructor(private el: HTMLButtonElement) {
    this.data = el.dataset['toCopy'] ?? el.innerText;
    // if data-to-copy is empty and the button is part of an input group
    // capture the value of the input.
    if (!this.data && el.parentElement?.classList.contains('go-InputGroup')) {
      this.data = (this.data || el.parentElement?.querySelector('input')?.value) ?? '';
    }
    el.addEventListener('click', e => this.handleCopyClick(e));
  }

  /**
   * Handles when the primary element is clicked.
   */
  handleCopyClick(e: MouseEvent): void {
    e.preventDefault();
    const TOOLTIP_SHOW_DURATION_MS = 1000;

    // This API is not available on iOS.
    if (!navigator.clipboard) {
      this.showTooltipText('Unable to copy', TOOLTIP_SHOW_DURATION_MS);
      return;
    }
    navigator.clipboard
      .writeText(this.data)
      .then(() => {
        this.showTooltipText('Copied!', TOOLTIP_SHOW_DURATION_MS);
      })
      .catch(() => {
        this.showTooltipText('Unable to copy', TOOLTIP_SHOW_DURATION_MS);
      });
  }

  /**
   * Shows the given text in a tooltip for a specified amount of time, in milliseconds.
   */
  showTooltipText(text: string, durationMs: number): void {
    this.el.setAttribute('data-tooltip', text);
    setTimeout(() => this.el.setAttribute('data-tooltip', ''), durationMs);
  }
}
