<template>
  <div class="fm-table">
    <table class="table table-sm">
      <thead>
        <tr>
          <th class="w-65" v-on:click="sortBy('name')">
            {{ lang.manager.table.name }}
            <template v-if="sortSettings.field === 'name'">
              <i
                class="fas fa-sort-amount-down"
                v-show="sortSettings.direction === 'down'"
              />
              <i
                class="fas fa-sort-amount-up"
                v-show="sortSettings.direction === 'up'"
              />
            </template>
          </th>
          <th class="w-10" v-on:click="sortBy('size')">
            {{ lang.manager.table.size }}
            <template v-if="sortSettings.field === 'size'">
              <i
                class="fas fa-sort-amount-down"
                v-show="sortSettings.direction === 'down'"
              />
              <i
                class="fas fa-sort-amount-up"
                v-show="sortSettings.direction === 'up'"
              />
            </template>
          </th>
          <th class="w-10" v-on:click="sortBy('type')">
            {{ lang.manager.table.type }}
            <template v-if="sortSettings.field === 'type'">
              <i
                class="fas fa-sort-amount-down"
                v-show="sortSettings.direction === 'down'"
              />
              <i
                class="fas fa-sort-amount-up"
                v-show="sortSettings.direction === 'up'"
              />
            </template>
          </th>
          <th class="w-auto" v-on:click="sortBy('date')">
            {{ lang.manager.table.date }}
            <template v-if="sortSettings.field === 'date'">
              <i
                class="fas fa-sort-amount-down"
                v-show="sortSettings.direction === 'down'"
              />
              <i
                class="fas fa-sort-amount-up"
                v-show="sortSettings.direction === 'up'"
              />
            </template>
          </th>
        </tr>
      </thead>
      <tbody>
        <tr v-if="!isRootPath">
          <td colspan="4" class="fm-content-item" v-on:click="levelUp">
            <i class="fas fa-level-up-alt" />
          </td>
        </tr>
        <tr
          v-for="(directory, index) in directories"
          v-bind:key="`d-${index}`"
          v-bind:class="{
            'table-info': checkSelect('directories', directory.path),
          }"
          v-on:click="selectItem('directories', directory.path, $event)"
          v-on:contextmenu.prevent="contextMenu(directory, $event)"
        >
          <td
            class="fm-content-item unselectable"
            v-bind:class="acl && directory.acl === 0 ? 'text-hidden' : ''"
            v-on:dblclick="selectDirectory(directory.path)"
          >
            <i class="far fa-folder" /> {{ directory.basename }}
          </td>
          <td />
          <td>{{ lang.manager.table.folder }}</td>
          <td>
            {{ timestampToDate(directory.timestamp) }}
          </td>
        </tr>
        <tr
          v-for="(file, index) in files"
          v-bind:key="`f-${index}`"
          v-bind:class="{ 'table-info': checkSelect('files', file.path) }"
          v-on:click="selectItem('files', file.path, $event)"
          v-on:dblclick="selectAction(file.path, file.extension)"
          v-on:contextmenu.prevent="contextMenu(file, $event)"
        >
          <td
            class="fm-content-item unselectable"
            v-bind:class="acl && file.acl === 0 ? 'text-hidden' : ''"
          >
            <i class="far" v-bind:class="extensionToIcon(file.extension)" />
            {{ file.filename ? file.filename : file.basename }}
          </td>
          <td>{{ bytesToHuman(file.size) }}</td>
          <td>
            {{ file.extension }}
          </td>
          <td>
            {{ timestampToDate(file.timestamp) }}
          </td>
        </tr>
      </tbody>
    </table>
  </div>
</template>

<script>
import translate from "@/utils/translate";
import helper from "@/utils/helper";
import managerHelper from "./mixins/manager";

export default {
  name: "table-view",
  mixins: [translate, helper, managerHelper],
  props: {
    manager: { type: String, required: true },
  },
  computed: {
    /**
     * Sort settings
     * @returns {*}
     */
    sortSettings() {
      return this.$store.state.fm[this.manager].sort;
    },
  },
  methods: {
    /**
     * Sort by field
     * @param field
     */
    sortBy(field) {
      this.$store.dispatch(`fm/${this.manager}/sortBy`, {
        field,
        direction: null,
      });
    },
  },
};
</script>

<style lang="scss">
.fm-table {
  thead th {
    background: white;
    position: sticky;
    top: 0;
    z-index: 10;
    cursor: pointer;
    border-top: none;

    &:hover {
      background-color: #f8f9fa;
    }

    & > i {
      padding-left: 0.5rem;
    }
  }

  td {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  tr:hover {
    background-color: #f8f9fa;
  }

  .w-10 {
    width: 10%;
  }

  .w-65 {
    width: 65%;
  }

  .fm-content-item {
    cursor: pointer;
    max-width: 1px;
  }

  .text-hidden {
    color: #cdcdcd;
  }
}
</style>
