import Controller from "@ember/controller";
import { action } from "@ember/object";
import { or } from "@ember/object/computed";
import { service } from "@ember/service";
import { observes } from "@ember-decorators/object";
import { clipboardCopy } from "discourse/lib/utilities";
import { INPUT_DELAY } from "discourse-common/config/environment";
import discourseDebounce from "discourse-common/lib/debounce";
import { i18n } from "discourse-i18n";
import Permalink from "admin/models/permalink";

export default class AdminPermalinksIndexController extends Controller {
  @service dialog;
  @service toasts;

  loading = false;
  filter = null;

  @or("model.length", "filter") showSearch;

  _debouncedShow() {
    Permalink.findAll(this.filter).then((result) => {
      this.set("model", result);
      this.set("loading", false);
    });
  }

  @observes("filter")
  show() {
    discourseDebounce(this, this._debouncedShow, INPUT_DELAY);
  }

  @action
  copyUrl(pl) {
    let linkElement = document.querySelector(`#admin-permalink-${pl.id}`);
    clipboardCopy(linkElement.textContent);
    this.toasts.success({
      duration: 3000,
      data: {
        message: i18n("admin.permalink.copy_success"),
      },
    });
  }

  @action
  destroyRecord(permalink) {
    this.dialog.yesNoConfirm({
      message: i18n("admin.permalink.delete_confirm"),
      didConfirm: async () => {
        try {
          await this.store.destroyRecord("permalink", permalink);
          this.model.removeObject(permalink);
        } catch {
          this.dialog.alert(i18n("generic_error"));
        }
      },
    });
  }
}