<template>
  <div>
    <b-card class="main-card mb-4">
      <b-row class="mb-2" no-gutters>
        <b-col md="6">
            <button type="button" class="btn btn-primary" @click="filterToggle">
              <i class="fa fa-filter"></i>
            </button>
            <div v-if="filter_status" class="filter dropdown-menu show">
              <entity-template-filter
                :form="form"
                @clicked="filterSubmit"
                @reset="FilterReset"
              ></entity-template-filter>
            </div>
        </b-col>
        <b-col md="6"  v-if="permission_list.includes('add entity')" class="text-right">
          <router-link 
            class="btn btn-primary" 
            to="create" 
            tag="button"
          >
            <i class="fa fa-plus"></i>
          </router-link>
        </b-col>
      </b-row>
      <table class="table table-striped">
        <thead>
          <paginate-nav
            v-if="entity_list.page"
            :colspan="colspan"
            :pervious_page="entity_list.page.pervious_page"
            :next_page="entity_list.page.next_page"
            @clicked="dataHandler"
          ></paginate-nav>
          <tr>
              <th>#</th>
              <th style="width: 25%">Details</th>
              <th>Status</th>
              <th>Created</th>
              <th>Actions</th>
          </tr>
        </thead>
        <tbody>
          <tr v-if="entity_list.data" v-for="(entity, $index) in entity_list.data" :key="$index">
            <td>{{ $index + 1 }}</td>
            <td>
              <div><b>Hash Id</b>: {{ entity.hash_id }}</div>
              <div><b>Name</b>: {{ entity.name }}</div>
            </td>
            <td>
                <span :class="'badge badge-' + entity.status[0].color">{{ entity.status[0].name }}</span>
            </td>
            <td>
              {{ entity.created_at }}
            </td>
            <td>
              <router-link  
                  v-if="permission_list.includes('edit entity')"
                  :to="'edit/' + entity.hash_id" 
                  class="btn btn-xs btn-light" 
                  title="Edit"
                >
                  <i class="fa fa-edit"></i>
              </router-link>
            </td>
          </tr>
          <tr v-if="!entity_list.data || !entity_list.data[0]">
            <td class="text-center" :colspan="colspan">
              <vue-element-loading v-if="loading" :active="true" spinner="line-scale" color="var(--primary)"></vue-element-loading>
              <span v-if="!loading">Empty</span>
            </td>
          </tr>
        </tbody>
        <tfoot v-if="entity_list.page">
          <paginate-nav
            :colspan="colspan"
            :pervious_page="entity_list.page.pervious_page"
            :next_page="entity_list.page.next_page"
            @clicked="dataHandler"
          >
          </paginate-nav>
          <tr>
            <td class="text-right" :colspan="colspan">
              <small>Total: {{ entity_list.total }}</small>
            </td>
          </tr>
        </tfoot>
      </table>
    </b-card>
  </div>
</template>

<script>
  import entityTemplateFilter from "./Filter";
  import PaginateNav from '../../components/paginations/NextPerviousPagination';

  export default {
    components: {
      entityTemplateFilter,
      PaginateNav
    },
    data() {
      return {
        form: new Form({
            name: General.getURLParam('name'),
            status: General.returnAray(General.getURLParam('status[]')),
            page: General.getURLParam('page')
        }),
        colspan: 5,
        filter_status: false,
        loading: true,
        entity_list: [],
        permission_list: []
      }
    },
    methods: {
      getPermissionList() {
        let vm = this;
        let url = 'user/self';
        let form = new Form({});
        General.getCall(url, form).then(response => {
            vm.permission_list = response.data.permission_list;
        });
      },
      getentityTemplateList() {
        let vm = this;
        let url = 'entity/list';
        vm.tableCall(url);
      },
      tableCall(url) {
        let vm = this;
        vm.loading = true;
        General.tableCall(url, vm.form).then(response => {
          vm.loading = false;
          vm.entity_list = response;
          vm.form.page = General.getURLParam('page');
          vm.convertStatus();
        });
      },
      convertStatus() {
        let vm = this;  
        vm.entity_list.data.forEach(function(element, index) {
          element.status = General.initFormArray(Constants.entity_status, [element.status]);
        });
      },
      dataHandler(url) {
        let vm = this;
        vm.form.page = General.getStringParam('page', url);
        vm.tableCall('entity/list');
      },
      filterToggle() {
        let vm = this;
        vm.filter_status = !vm.filter_status;
      },
      filterCloseClick(e) {
        let vm = this;
        if (!vm.$el.contains(e.target) && !e.target.classList.contains('filter')) {
          vm.filter_status = false;
        }
      },
      filterSubmit() {
        let vm = this;
        let url = 'entity/list';
        vm.form.page = '';
        vm.tableCall(url);
        vm.filterToggle();
      },
      FilterReset() {
        let vm = this;
        vm.form.reset();
        vm.filterSubmit();
      }
    },
    mounted() {
      let vm = this;
      document.addEventListener('click', vm.filterCloseClick);
    },
    created() {
      let vm = this;
      vm.getPermissionList();
      vm.getentityTemplateList();
    }
  }
</script>
