import Component from "@glimmer/component";
import { action } from "@ember/object";
import { service } from "@ember/service";
import routeAction from "discourse/helpers/route-action";
import { ajax } from "discourse/lib/ajax";
import { popupAjaxError } from "discourse/lib/ajax-error";
import { i18n } from "discourse-i18n";

export default class AdminBackupsActions extends Component {
  @service currentUser;
  @service site;
  @service dialog;

  @action
  toggleReadOnlyMode() {
    if (!this.site.isReadOnly) {
      this.dialog.yesNoConfirm({
        message: i18n("admin.backups.read_only.enable.confirm"),
        didConfirm: () => {
          this.currentUser.set("hideReadOnlyAlert", true);
          this.#toggleReadOnlyMode(true);
        },
      });
    } else {
      this.#toggleReadOnlyMode(false);
    }
  }

  get rollbackDisabled() {
    return !this.rollbackEnabled;
  }

  get rollbackEnabled() {
    return (
      this.args.backups.canRollback &&
      this.args.backups.restoreEnabled &&
      !this.args.backups.isOperationRunning
    );
  }

  async #toggleReadOnlyMode(enable) {
    try {
      await ajax("/admin/backups/readonly", {
        type: "PUT",
        data: { enable },
      });
      this.site.set("isReadOnly", enable);
    } catch (err) {
      popupAjaxError(err);
    }
  }

  <template>
    {{#if @backups.isOperationRunning}}
      <@actions.Danger
        @action={{routeAction "cancelOperation"}}
        @title="admin.backups.operations.cancel.title"
        @label="admin.backups.operations.cancel.label"
        @icon="xmark"
        class="admin-backups__cancel"
      />
    {{else}}
      <@actions.Primary
        @action={{routeAction "showStartBackupModal"}}
        @title="admin.backups.operations.backup.title"
        @label="admin.backups.operations.backup.label"
        @icon="rocket"
        class="admin-backups__start"
      />
    {{/if}}

    {{#if @backups.canRollback}}
      <@actions.Default
        @action={{routeAction "rollback"}}
        @label="admin.backups.operations.rollback.label"
        @title="admin.backups.operations.rollback.title"
        @disabled={{this.rollbackDisabled}}
        @icon="truck-medical"
        class="admin-backups__rollback"
      />
    {{/if}}

    <@actions.Default
      @action={{this.toggleReadOnlyMode}}
      @disabled={{@backups.isOperationRunning}}
      @title={{if
        this.site.isReadOnly
        "admin.backups.read_only.disable.title"
        "admin.backups.read_only.enable.title"
      }}
      @label={{if
        this.site.isReadOnly
        "admin.backups.read_only.disable.label"
        "admin.backups.read_only.enable.label"
      }}
      @icon={{if this.site.isReadOnly "far-eye-slash" "far-eye"}}
      class="admin-backups__toggle-read-only"
    />
  </template>
}