<template>
  <div class="mt-5">
    <!--    <h3 class="text-center mb-5 grey&#45;&#45;text text&#45;&#45;darken-2">
      &lt;!&ndash; Metadata Operations &ndash;&gt;
      {{ $t('title.metaOperations') }}
    </h3>-->

    <v-simple-table class="ma-2 meta-table text-center mx-auto">
      <tbody>
        <tr>
          <td>
            <!-- Export project meta to zip file and download. -->
            {{ $t('msg.info.exportZip') }}
          </td>
          <td>
            <v-btn
              v-t="['c:proj-meta:export']"
              min-width="150"
              color="primary"
              small
              outlined
              :loading="loading === 'export-zip'"
              @click="exportMetaZip()"
            >
              <v-icon small> mdi-export </v-icon>&nbsp;
              <!-- Export zip -->
              {{ $t('activity.exportZip') }}
            </v-btn>
          </td>
        </tr>
        <tr>
          <td>
            <!-- Import project meta zip file and restart. -->
            {{ $t('msg.info.importZip') }}
          </td>
          <td>
            <v-btn
              v-t="['a:proj-meta:import']"
              min-width="150"
              :loading="loading === 'import-zip'"
              color="info"
              small
              outlined
              @click="$refs.importFile.click()"
            >
              <v-icon small> mdi-import </v-icon>&nbsp;

              <!-- Import Zip -->
              {{ $t('activity.importZip') }}
            </v-btn>

            <input v-show="false" ref="importFile" type="file" accept=".zip" @change="importMetaZip" />
          </td>
        </tr>
        <!--        <tr>-->
        <!--          <td>-->
        <!--            &lt;!&ndash; Clear all metadata from meta tables. &ndash;&gt;-->
        <!--            {{ $t('tooltip.clearMetadata') }}-->
        <!--          </td>-->
        <!--          <td>-->
        <!--            <v-btn-->
        <!--              :loading="loading === 'reset-metadata'"-->
        <!--              min-width="150"-->
        <!--              color="error"-->
        <!--              small-->
        <!--              outlined-->
        <!--              @click="resetMeta"-->
        <!--            >-->
        <!--              <v-icon small>-->
        <!--                mdi-delete-variant-->
        <!--              </v-icon>&nbsp;-->
        <!--              &lt;!&ndash; Reset &ndash;&gt;-->
        <!--              {{ $t('general.reset') }}-->
        <!--            </v-btn>-->
        <!--          </td>-->
        <!--        </tr>-->
      </tbody>
    </v-simple-table>

    <dlg-label-submit-cancel
      v-if="dialogShow"
      type="primary"
      :actions-mtd="confirmAction"
      :dialog-show="dialogShow"
      :heading="confirmMessage"
    />

    <!--    <import-template-->
    <!--      :nodes="{dbAlias: 'db'}"-->
    <!--    />-->
  </div>
</template>

<script>
import DlgLabelSubmitCancel from '~/components/utils/DlgLabelSubmitCancel';
// import ImportTemplate from '~/components/project/settings/importTemplate'

export default {
  name: 'XcMeta',
  components: {
    // ImportTemplate,
    DlgLabelSubmitCancel,
  },
  data: () => ({
    loading: null,
    dialogShow: false,
    confirmAction: null,
    confirmMessage: '',
  }),
  methods: {
    async exportMeta() {
      this.dialogShow = true;
      // this.confirmMessage = 'Do you want to export metadata from meta tables?'
      this.confirmMessage = `${this.$t('msg.info.exportMetadata')}`;
      this.confirmAction = async act => {
        if (act === 'hideDialog') {
          this.dialogShow = false;
        } else {
          this.loading = 'export-file';
          try {
            // todo: set env based on `nodes` prop
            await this.$store.dispatch('sqlMgr/ActSqlOp', [
              {
                // dbAlias: 'db',
                env: '_noco',
              },
              'xcMetaTablesExportDbToLocalFs',
            ]);
            // this.$toast.success('Successfully exported metadata').goAway(3000)
            this.$toast.success(`${this.$t('msg.toast.exportMetadata')}`).goAway(3000);
          } catch (e) {
            this.$toast.error(e.message).goAway(3000);
          }
          this.dialogShow = false;
          this.loading = null;
        }
      };
    },
    async exportMetaZip() {
      this.dialogShow = true;
      // this.confirmMessage = 'Do you want to export metadata from meta tables?'
      this.confirmMessage = `${this.$t('msg.info.exportMetadata')}`;
      this.confirmAction = async act => {
        if (act === 'hideDialog') {
          this.dialogShow = false;
        } else {
          this.loading = 'export-zip';
          let data;
          try {
            data = await this.$store.dispatch('sqlMgr/ActSqlOp', [
              {
                // dbAlias: 'db',
                env: '_noco',
              },
              'xcMetaTablesExportDbToZip',
              null,
              null,
              {
                responseType: 'blob',
              },
            ]);
            const url = window.URL.createObjectURL(new Blob([data], { type: 'application/zip' }));
            const link = document.createElement('a');
            link.href = url;
            link.setAttribute('download', 'meta.zip'); // or any other extension
            document.body.appendChild(link);
            link.click();
            // this.$toast.success('Successfully exported metadata').goAway(3000)
            this.$toast.success(`${this.$t('msg.toast.exportMetadata')}`).goAway(3000);
          } catch (e) {
            this.$toast.error(e.message).goAway(3000);
          }
          this.dialogShow = false;
          this.loading = null;
          this.$e('a:proj-meta:export');
        }
      };
    },
    async resetMeta() {
      this.dialogShow = true;
      // this.confirmMessage = 'Do you want to clear metadata from meta tables?'
      this.confirmMessage = `${this.$t('msg.info.clearMetadata')}`;
      this.confirmAction = async act => {
        if (act === 'hideDialog') {
          this.dialogShow = false;
        } else {
          this.loading = 'reset-metadata';
          try {
            await this.$store.dispatch('sqlMgr/ActSqlOp', [
              {
                // dbAlias: 'db',
                env: '_noco',
              },
              'xcMetaTablesReset',
            ]);
            // this.$toast.success('Metadata cleared successfully').goAway(3000)
            this.$toast.success(`${this.$t('msg.toast.clearMetadata')}`).goAway(3000);
          } catch (e) {
            this.$toast.error(e.message).goAway(3000);
          }
          this.dialogShow = false;
          this.loading = null;
        }
      };
    },

    async importMeta() {
      this.dialogShow = true;
      // this.confirmMessage = 'Do you want to import metadata from meta directory?'
      this.confirmMessage = `${this.$t('msg.info.importMetadata')}`;
      this.confirmAction = async act => {
        if (act === 'hideDialog') {
          this.dialogShow = false;
        } else {
          this.loading = 'import-file';
          try {
            await this.$store.dispatch('sqlMgr/ActSqlOp', [
              {
                env: '_noco',
              },
              'xcMetaTablesImportLocalFsToDb',
            ]);

            // this.$toast.success('Metadata imported successfully').goAway(3000)
            this.$toast.success(`${this.$t('msg.toast.importMetadata')}`).goAway(3000);
          } catch (e) {
            this.$toast.error(e.message).goAway(3000);
          }
          this.dialogShow = false;
          this.loading = null;
        }
      };
    },
    async importMetaZip() {
      if (this.$refs.importFile && this.$refs.importFile.files && this.$refs.importFile.files[0]) {
        const zipFile = this.$refs.importFile.files[0];
        this.loading = 'import-zip';
        try {
          this.$refs.importFile.value = '';
          await this.$store.dispatch('sqlMgr/ActUploadOld', [
            {
              env: '_noco',
            },
            'xcMetaTablesImportZipToLocalFsAndDb',
            {
              importsToCurrentProject: true,
            },
            zipFile,
          ]);
          // this.$toast.success('Successfully imported metadata').goAway(3000)
          this.$toast.success(`${this.$t('msg.toast.importMetadata')}`).goAway(3000);
        } catch (e) {
          this.$toast.error(e.message).goAway(3000);
        }
        this.dialogShow = false;
        this.loading = null;
      }
    },
  },
};
</script>

<style scoped>
.meta-table {
  max-width: 700px;
}
</style>
<!--
/**
 * @copyright Copyright (c) 2021, Xgene Cloud Ltd
 *
 * @author Naveen MR <oof1lab@gmail.com>
 * @author Pranav C Balan <pranavxc@gmail.com>
 * @author Wing-Kam Wong <wingkwong.code@gmail.com>
 *
 * @license GNU AGPL version 3 or any later version
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 *
 */
-->
