<template>
  <BaseTable
    :columns="accreditationColumns"
    :data="model.records"
    :loading="model.loading"
    :pagination="model.pagination"
    :selected.sync="model.selected"
    :binary-sort="true"
    selection="multiple"
    @requestTable="updateTableData"
    @update="updateTableData"
  >
    <template #top>
      <div class="q-pt-md"></div>
    </template>
    <template #search>
      <AccreditationSearchBar @save-data="exportRecords" @query="search" />
    </template>
  </BaseTable>
</template>

<script lang="ts">
import { Component, Prop, Vue } from 'vue-property-decorator';
import { convertDateFormat } from '@utils/format-date';
import { DateFormat } from '@constants/utils/format-date';
import AccreditationSearchBar from '@components/registries/search-bars/accreditation-search-bar.vue';
import { Registry } from '@openapi/registry-service';
import get from 'lodash/get';

@Component({
  components: {
    AccreditationSearchBar,
  },
})
export default class AccreditationList extends Vue {
  @Prop() model: any;
  @Prop() goToRegistryObject: any;
  @Prop() updateTableData: any;
  @Prop() exportRecords: any;
  @Prop() search: any;

  accreditationColumns = [
    {
      align: 'left',
      field(val: Registry) {
        return val;
      },
      format: (val: any) => {
        return get(
          val,
          'document.resRegNumber',
          'Регистрационный номер отсутствует'
        );
      },
      handler: (id: string, opts = {}) => {
        this.goToRegistryObject(id, opts);
      },
      handlerField: 'id',
      label: 'Регистрационный номер аккредитации',
      name: 'document.resRegNumber',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'finishDate',
      format: (val: any) => {
        if (val) {
          return convertDateFormat(
            val,
            DateFormat.invertedDate,
            DateFormat.date
          );
        }
        return '';
      },
      label: 'Дата внесения записи',
      name: 'finishDate',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'document.resApplicant',
      label: 'Полное наименование организации',
      name: 'document.resApplicant',
      style: 'white-space: normal;',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'applicant.ogrn',
      label:
        'Основной государственный регистрационный номер организации по ЕГРЮЛ',
      name: 'applicant.ogrn',
      style: 'white-space: normal;',
      headerStyle: 'white-space: normal;',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'applicant.inn',
      label: 'Идентификационный номер налогоплательщика',
      style: 'white-space: normal;',
      headerStyle: 'white-space: normal;',
      name: 'applicant.inn',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'document.resDate',
      format: (val: any) => {
        if (val) {
          return convertDateFormat(
            val,
            DateFormat.invertedDate,
            DateFormat.date
          );
        }
        return '';
      },
      label: 'Дата решения о государственной аккредитации',
      style: 'white-space: normal;',
      headerStyle: 'white-space: normal',
      name: 'resDate',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'document.resNumber',
      label: 'Номер решения',
      name: 'document.resNumber',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'changeDate',
      format: (val: any) => {
        if (val) {
          return convertDateFormat(
            val,
            DateFormat.invertedDate,
            DateFormat.date
          );
        }
        return '';
      },
      label: 'Дата внесения изменения',
      name: 'changeDate',
      style: 'white-space: normal;',
      headerStyle: 'white-space: normal;',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'changeInfo',
      label:
        'Сведения об изменениях, внесенных в содержащиеся в реестре сведения об аккредитованной организации (при наличии)',
      name: 'changeInfo',
      style: 'white-space: normal;min-width: 200px;',
      headerStyle: 'white-space: normal;',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'document.resRegStatus',
      label: 'Статус',
      format: (val: string) => {
        const res = this.$store.getters[
          'registryService/referenceBooks/appliedReferenceBook'
        ]({
          key: val,
          id: 'accreditation_it_1_0_1__application_status',
          valueName: 'value',
        });
        return res.value;
      },
      name: 'document.resRegStatus',
      required: true,
      sortable: true,
    },
  ];
}
</script>
