/* global i18n: false */
/* global Whisper: false */

/* eslint-disable no-new */

// eslint-disable-next-line func-names
(function() {
  'use strict';

  window.Whisper = window.Whisper || {};
  const { Logs } = window.Signal;

  const CLEAR_DATA_STEPS = {
    CHOICE: 1,
    DELETING: 2,
  };
  window.Whisper.ClearDataView = Whisper.View.extend({
    templateName: 'clear-data',
    className: 'full-screen-flow overlay',
    events: {
      'click .cancel': 'onCancel',
      'click .delete-all-data': 'onDeleteAllData',
    },
    initialize(onClear = null) {
      this.step = CLEAR_DATA_STEPS.CHOICE;
      this.onClear = onClear;
    },
    onCancel() {
      this.remove();
    },
    async onDeleteAllData() {
      window.log.info('Deleting everything!');
      this.step = CLEAR_DATA_STEPS.DELETING;
      this.render();

      await this.clearAllData();
    },
    async clearAllData() {
      if (this.onClear) {
        this.onClear();
      } else {
        try {
          await Logs.deleteAll();

          await window.Signal.Data.removeAll();
          await window.Signal.Data.close();
          await window.Signal.Data.removeDB();

          await window.Signal.Data.removeOtherData();
        } catch (error) {
          window.log.error(
            'Something went wrong deleting all data:',
            error && error.stack ? error.stack : error
          );
        }
        window.restart();
      }
    },
    render_attributes() {
      return {
        isStep1: this.step === CLEAR_DATA_STEPS.CHOICE,
        header: i18n('deleteAllDataHeader'),
        body: i18n('deleteAllDataBody'),
        cancelButton: i18n('cancel'),
        deleteButton: i18n('deleteAllDataButton'),

        isStep2: this.step === CLEAR_DATA_STEPS.DELETING,
        deleting: i18n('deleteAllDataProgress'),
      };
    },
  });
})();