<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>
      <CashbackSearchBar @save-data="exportRecords" @query="search" />
    </template>
  </BaseTable>
</template>

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

@Component({
  components: {
    CashbackSearchBar,
  },
})
export default class CashbackList 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 val.orderId ?? this.$t('registries.noStatement');
      },
      handler: (id: string, opts = {}) => {
        this.goToRegistryObject(id, opts);
      },
      handlerField: 'id',
      label: 'Номер заявления',
      name: 'orderId',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'applicant.fullName',
      label: 'ФИО заявителя',
      name: 'fullName',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'applicant.documents',
      format: (val: any) => val[0]?.series ?? '',
      label: 'Серия ДУЛ заявителя',
      name: 'series',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'applicant.documents',
      format: (val: any) => val[0]?.number ?? '',
      label: 'Номер ДУЛ заявителя',
      name: 'documentsNumber',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'export',
      format: (val: any) => {
        return val?.status ?? 'Распоряжение не сформировано';
      },
      label: 'Статус платежа',
      name: 'export',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'statement.informationChild.lastNameInformationChild',
      label: 'Фамилия ребенка',
      name: 'statement.informationChild.lastNameInformationChild',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'statement.informationChild.firstnameInformationChild',
      label: 'Имя ребенка',
      name: 'statement.informationChild.firstnameInformationChild',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'statement.childPasportDock.childPasportSeries',
      label: 'Серия Паспорта ребенка',
      name: 'statement.childPasportDock.childPasportSeries',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'statement.childPasportDock.childPasportkNumber',
      label: 'Номер Паспорта ребенка',
      name: 'statement.childPasportDock.childPasportkNumber',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'statement.childAckt.seryaChild',
      label: 'Серия свидетельства о рождении ребенка',
      name: 'statement.childAckt.seryaChild',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'statement.childAckt.numberChild',
      label: 'Номер свидетельства о рождении ребенка',
      name: 'statement.childAckt.numberChild',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'statement.camp.selectCamp',
      label: 'Наименование лагеря',
      name: 'statement.camp.selectCamp',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'statement.camp.innCamp',
      label: 'ИНН лагеря',
      name: 'statement.camp.innCamp',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'statement.informationPurchase.purchaseStartDate',
      label: 'Дата начала путевки',
      name: 'statement.informationPurchase.purchaseStartDate',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'statement.informationPurchase.purchaseEndDate',
      label: 'Дата окончания путевки',
      name: 'statement.informationPurchase.purchaseEndDate',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'statement.informationPurchase.payCheck',
      label: 'Номер карты МИР',
      name: 'statement.informationPurchase.payCheck',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'document.resReqDate',
      label: 'Дата обращения',
      name: 'document.resReqDate',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'document.resDate',
      format: (val: any) => {
        if (val) {
          return convertDateFormat(
            val,
            DateFormat.invertedDate,
            DateFormat.date
          );
        }
        return '';
      },
      label: 'Дата принятия решения',
      name: 'document.resDate',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'departmentFullName',
      label: 'Уполномоченный орган',
      name: 'departmentFullName',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'status.internal',
      format: (val: string) => {
        const res = this.$store.getters[
          'registryService/referenceBooks/appliedReferenceBook'
        ]({
          key: val,
          id: 'gpzu_2_application_status',
          valueName: 'description',
        });
        return res.value;
      },
      label: this.$t('registries.status'),
      name: 'status.internal',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'document.number',
      label: 'Номер решения',
      name: 'document.number',
      required: true,
      sortable: true,
    },
    {
      align: 'left',
      field: 'modified',
      label: 'Дата модификации объекта',
      format: (val: any) => (val ? convertDateFromTimestamp(val) : ''),
      name: 'modified',
      required: true,
      sortable: true,
    },
  ];

  getPaymentStatus(status: null | boolean): TranslateResult {
    if (status === false) return this.$t('registries.notPaid');
    if (status === true) return this.$t('registries.paid');
    return this.$t('registries.noInfo');
  }
}
</script>
