<template>
  <centered-1280-box class="Details">
    <template v-for="info in detailedInfo">
      <white-card
        v-if="info.isShow"
        :id="info.elementId"
        :key="info.elementId"
        class="Details-WhiteCard"
      >
        <div class="Details-Header">{{ info.label }}</div>
        <div class="col-12 col-sm-9">
          <data-blocks-grid
            v-for="(section, i) in info.formData"
            :key="i"
            :data="section"
            class="q-mb-sm"
          />
        </div>
      </white-card>
    </template>

    <infringement-administrative-block
      v-if="infringementEditor.administrative.isShow"
      :id="infringementEditor.administrative.elementId"
      :header="infringementEditor.administrative.label"
      :editable="isButtonsVisible"
      :infringementsAdministrative.sync="infringementsAdministrative"
      :recruitId="recruitId"
      @onBeforeAction="recordAction"
      @save="onSave"
    />
    <infringement-criminal-block
      v-if="infringementEditor.criminal.isShow"
      :id="infringementEditor.criminal.elementId"
      :header="infringementEditor.criminal.label"
      :editable="isButtonsVisible"
      :infringementsCriminal.sync="infringementCriminal"
      :recruitId="recruitId"
      @onBeforeAction="recordAction"
      @save="onSave"
    />
    <infringement-appeal-block
      v-if="infringementEditor.appeal.isShow"
      :id="infringementEditor.appeal.elementId"
      :header="infringementEditor.appeal.label"
      :editable="isButtonsVisible"
      :infringementsAppeal.sync="infringementAppeal"
      :recruitId="recruitId"
      @onBeforeAction="recordAction"
      @save="onSave"
    />
  </centered-1280-box>
</template>

<style lang="scss" scoped>
.Details {
  &-WhiteCard {
    padding: 12px 16px;
    margin-bottom: 16px;
  }
  &-Header {
    font-family: 'Golos UI', sans-serif;
    font-style: normal;
    font-weight: 500;
    font-size: 20px;
    line-height: 24px;
    letter-spacing: -0.015em;
    color: rgba(2, 12, 18, 0.9);
    padding-bottom: 12px;
    margin-bottom: 20px;
    border-bottom: 1px solid rgba(1, 72, 116, 0.11);
  }
}
</style>

<script lang="ts">
import { Component, Prop, Vue, Watch } from 'vue-property-decorator';
import { get, isNull } from 'lodash';
import { formatDate, getObjDict } from '@/recruits/utils';
import DataBlock from '@components/cards/statements/components/dataBlock.vue';
import Centered1280Box from '@/recruits/components/common/centered-1280-box.vue';
import WhiteCard from '@/recruits/components/common/white-card.vue';
import {
  WorkPlaceV3,
  RussianSpeciality,
  ForeignSpecialities,
  SportInfoV3,
  CriminalCaseInfo,
  DriverLicense,
  UniversityV2,
  ForeignInfoV3,
} from '@/recruits/openapi/person-registry';

import {
  DecisionDocumentServiceApi,
  InfringementAdministrative,
  InfringementCriminal,
  InfringementAppeal,
} from '@/recruits/openapi/decision-document';
import InfringementAdministrativeBlock from './infringement/InfringementAdministrativeBlock.vue';
import InfringementCriminalBlock from './infringement/InfringementCriminalBlock.vue';
import InfringementAppealBlock from './infringement/InfringementAppealBlock.vue';
import RInput from '@/recruits/components/common/r-input.vue';
import type { FormDataSectionProps } from '../common/data-blocks-grid.vue';
import DataBlocksGrid from '../common/data-blocks-grid.vue';
import { DataForRecruit } from './masthead/interfaces';
import { TabSection } from '@/recruits/components/recruit-card/tab-sections/interfaces';
// eslint-disable-next-line @typescript-eslint/no-var-requires
const EducationDict = require('@/recruits/models/Directorys/EducationTypes.json');
const EducationTypes = getObjDict(EducationDict.documents);
// eslint-disable-next-line @typescript-eslint/no-var-requires
const MedDict = require('@/recruits/models/Directorys/MedCodes.json');
const MedTypes = getObjDict(MedDict.documents);

interface DetailedInfo extends TabSection {
  formData: FormDataSectionProps[];
}
interface InfringementEditor {
  administrative: TabSection;
  criminal: TabSection;
  appeal: TabSection;
}
@Component({
  components: {
    DataBlock,
    Centered1280Box,
    WhiteCard,
    RInput,
    InfringementAdministrativeBlock,
    InfringementCriminalBlock,
    InfringementAppealBlock,
    DataBlocksGrid,
  },
  methods: {
    get,
    formatDate,
    isNull,
  },
})
export default class DetailsTab extends Vue {
  get: typeof get;
  @Prop()
  readonly data: DataForRecruit;

  @Prop({ type: Boolean, default: false })
  public loading: boolean;

  DecisionDocumentServiceApi = new DecisionDocumentServiceApi();

  public infringementsAdministrative: InfringementAdministrative[] = [];
  public infringementCriminal: InfringementCriminal[] = [];
  public infringementAppeal: InfringementAppeal[] = [];
  public isNewLayout = true;

  async fetchInfringement(): Promise<void> {
    const {
      data,
    } = await this.DecisionDocumentServiceApi.getRecruitInfringementAndAppeal(
      this.recruitId
    );
    if (data?.infringementAdministrative) {
      this.infringementsAdministrative.push(...data.infringementAdministrative);
    }
    if (data?.infringementCriminal) {
      this.infringementCriminal.push(...data.infringementCriminal);
    }
    if (data?.infringementAppeal) {
      this.infringementAppeal.push(...data.infringementAppeal);
    }
  }

  async onSave(): Promise<void> {
    this.$emit('refresh');
    await this.fetchInfringement();
  }

  async mounted(): Promise<void> {
    await this.fetchInfringement();
  }

  @Watch('tabSections', { immediate: true })
  updateTabSections(val: TabSection[]): void {
    this.$emit('updateTabSections', val);
  }

  get tabSections(): TabSection[] {
    return [
      ...this.detailedInfo.map(({ label, elementId, isShow }) => ({
        label,
        elementId,
        isShow,
      })),
      this.infringementEditor.administrative,
      this.infringementEditor.criminal,
      this.infringementEditor.appeal,
    ];
  }

  get detailedInfo(): DetailedInfo[] {
    return [
      {
        label: 'Информация о трудовой деятельности',
        elementId: 'workInfo',
        formData: [...this.workSections, ...this.commercialInfo],
        isShow: this.checkWorkInfo,
      },
      {
        label: 'Сведения об образовании',
        elementId: 'educationInfo',
        formData: this.educationData,
        isShow: !!this.educationData.length,
      },
      {
        label: 'Медицинские сведения',
        elementId: 'medicalInfo',
        formData: this.medicalInfo,
        isShow: !!this.data.details?.med?.code,
      },
      {
        label: 'Сведения о смерти',
        elementId: 'deathInfo',
        formData: this.deathInfo,
        isShow: !!this.data.details?.deathInfo?.deathDate,
      },
      {
        label: 'Сведения о недвижимом имуществе',
        elementId: 'realEstateInfo',
        formData: this.realEstateInfo,
        isShow: !!this.realEstateInfo.length,
      },
      {
        label: 'Сведения о воинском учёте',
        elementId: 'militaryInfo',
        formData: this.militaryInfo,
        isShow: !!this.militaryInfo.length,
      },
      {
        label: 'Сведения о присвоении спортивных разрядов и званий',
        elementId: 'sportInfo',
        formData: this.sportSections,
        isShow: this.checkSportInfo,
      },
      {
        label: 'Сведения о праве управления транспортным средством',
        elementId: 'driverLicenseInfo',
        formData: this.driverLicenseSections,
        isShow: this.checkDriverLicenses,
      },
      {
        label: 'Иностранное гражданство',
        elementId: 'foreignInfo',
        formData: [this.foreignSection],
        isShow: this.checkForeign,
      },
      {
        label: 'Сведения о судимости и уголовном преследовании',
        elementId: 'criminalInfo',
        formData: [this.criminalSection],
        isShow: this.checkCriminalInfo,
      },
      {
        label:
          'Сведения о принятии решений по вопросам гражданства Российской Федерации',
        elementId: 'citizenshipInfo',
        formData: [this.citizenshipInfo],
        isShow: true,
      },
    ];
  }

  get infringementEditor(): InfringementEditor {
    return {
      administrative: {
        label: 'Административная ответственность в связи с нарушением ФЗ-53',
        elementId: 'infringementAdministrativeEditor',
        isShow: !!(
          this.infringementsAdministrative.length || this.isButtonsVisible
        ),
      },
      criminal: {
        label: 'Уголовная ответственность в связи с нарушением ФЗ-53',
        elementId: 'infringementCriminalEditor',
        isShow: !!(this.infringementCriminal.length || this.isButtonsVisible),
      },
      appeal: {
        label: 'Обжалование нарушений ФЗ-53',
        elementId: 'infringementAppealEditor',
        isShow: !!(this.infringementAppeal.length || this.isButtonsVisible),
      },
    };
  }

  get isButtonsVisible(): boolean {
    return !this.data?.stateRecruit?.recruitmentConversion;
  }

  get educationData(): FormDataSectionProps[] {
    return [
      this.checkUniversities && this.educationSection,
      this.checkRussianSpecialities && this.russianDiplomas,
      this.checkForeignSpecialities && this.foreignDiplomas,
    ].filter(Boolean) as FormDataSectionProps[];
  }

  get activityRecorderPersonInfo(): Record<string, string> {
    return this.data.systemInfo && this.data.mainInfo
      ? {
          id: this.data.id,
          birthDate: this.data.mainInfo.birthDate,
          idERN: this.data.systemInfo.idERN,
          fio: this.data.mainInfo.fullName,
        }
      : {};
  }

  get recruitId(): string {
    return this.$route.params.id;
  }

  getEducationType(type: string): string {
    return EducationTypes[type];
  }

  getMedType(type: string): string {
    return MedTypes[type];
  }

  getDrivingLicenseName(driverLicenseType: string): string {
    switch (driverLicenseType) {
      case 'DRIVER_LICENSE':
        return 'Сведения о водительском удостоверении';
      case 'TRACTOR_LICENSE':
        return 'Удостоверение тракториста-машиниста (тракториста)';
      default:
        return 'Удостоверение';
    }
  }

  getDriverLicenseStatus(driverLicenseStatus: string): string {
    switch (driverLicenseStatus) {
      case 'CORRECT':
        return 'Действительное';
      default:
        return driverLicenseStatus;
    }
  }

  get checkForeignSpecialities(): boolean {
    return this.data.details?.educationInfo?.foreignSpecialities.length !== 0;
  }

  get checkRussianSpecialities(): boolean {
    return this.data.details?.educationInfo?.russianSpecialities.length !== 0;
  }

  get checkUniversities(): boolean {
    return this.data.details?.educationInfo?.universities.length !== 0;
  }

  // get checkDisability(): boolean {
  //   return !!this.data.details?.med?.group;
  // }

  get checkForeign(): boolean {
    return !(
      isNull(this.data.details?.foreign) ||
      this.data.details?.foreign?.length === 0
    );
  }

  // get checkTravelsAbroad(): boolean {
  //   return !!this.data.details?.travelsAbroad && this.data.details?.travelsAbroad.length
  // }

  get checkDriverLicenses(): boolean {
    return !(
      isNull(this.data.details?.driverLicenses) ||
      this.data.details?.driverLicenses?.length === 0
    );
  }

  get checkSportInfo(): boolean {
    return !(
      isNull(this.data.details?.sportInfo) ||
      this.data.details?.sportInfo?.length === 0
    );
  }

  get checkWorkInfo(): boolean {
    return (
      !!this.data.details?.workPlaces?.length ||
      !!this.data.details?.commercialInfo?.length
    );
  }

  get checkCriminalInfo(): boolean {
    return !!this.data.details?.criminalCaseInfo?.length;
  }

  getForeignType(type: string): string {
    switch (type) {
      case 'Г':
        return 'Имеется гражданство';
      case 'В':
        return 'Имеется ВНЖ';
      case 'И':
        return 'Имеются иные основания';
      default:
        return type || 'Отсутствует';
    }
  }

  getMilitaryFlagLabel(flag: string): string {
    switch (flag) {
      case '0':
        return 'Не состоит на воинском учёте';
      case '1':
        return 'Состоит на воинском учёте';
      case '2':
        return 'Снят в воинского учёта';
      default:
        return 'Отсутствует';
    }
  }

  recordAction(buttonCode: string, data: Record<string, string>): void {
    this.$recordActivity({
      buttonCode,
      extraInfo: {
        type: 'recruit',
        ...this.activityRecorderPersonInfo,
        ...data,
      },
    });
  }

  get workSections(): FormDataSectionProps[] {
    const bolder = true;
    const workPlaces = get(this.data, 'details.workPlaces', []);
    // const actualWorkPlaces = workPlaces.filter(
    //   ({ actualWorkPlace }: { actualWorkPlace: boolean }) => actualWorkPlace
    // );
    const children = workPlaces.map((workPlace: WorkPlaceV3) => {
      // const label = workPlace.actualWorkPlace
      //   ? 'Текущее место работы'
      //   : 'Предыдущее место работы';
      return {
        label: 'Место работы',
        bolder,
        columns: 7,
        children: [
          {
            background: 'white',
            label: 'Наименование',
            icon: 'pgs-organizations',
            value: workPlace.fullName,
            size: 4,
          },
          {
            label: 'ИНН',
            value: workPlace.inn,
            background: 'white',
            size: 1,
          },
          {
            label: 'ОГРН',
            value: workPlace.ogrn,
            background: 'white',
            size: 1,
          },
          {
            label: 'Дата приема на работу',
            icon: 'pgs-calendar',
            value: formatDate(workPlace.periodStart as string),
            background: 'white',
            size: 1,
          },
          // {
          //   label: 'Дата увольнения',
          //   icon: 'pgs-calendar',
          //   value: formatDate(workPlace.periodEnd as string),
          //   background: 'white',
          //   size: 1,
          // },
          // {
          //   label: 'Фактический адрес',
          //   value: workPlace.factAddress,
          //   background: 'white',
          //   size: 4,
          // },
          {
            label: 'Юридический адрес',
            icon: 'pgs-geo',
            value: workPlace.regAddress,
            background: 'white',
            size: 7,
          },
          // {
          //   label: 'Должность / профессия',
          //   value: workPlace.position,
          //   background: 'white',
          //   size: 1,
          // },
        ],
      };
    });
    return children;
  }

  get educationSection(): FormDataSectionProps {
    const isEducationExist =
      this.data && this.get(this.data, 'details.educationInfo.graduateLevel');
    const bolder = true;
    const border = true;
    const capsTitle = true;
    const educationLevel = isEducationExist
      ? [
          {
            label: 'Уровень',
            value: this.getEducationType(
              this.data?.details?.educationInfo?.graduateLevel ?? ''
            ),
            background: 'white',
            size: 2,
          },
        ]
      : [];
    const diplomas = get(
      this.data,
      'details.educationInfo.universities',
      []
    ).map((education: UniversityV2) => ({
      label: 'Учебное заведение',
      capsTitle,
      border,
      class: 'q-mt-xs',
      columns: 12,
      size: 2,
      growMode: true,
      children: [
        {
          label: 'Наименование',
          icon: 'pgs-organizations',
          value: education.name,
          background: 'white',
          size: 9,
        },
        {
          label: 'Тип организации',
          value: education.organizationType,
          background: 'white',
          size: 3,
        },
        // {
        //   label: 'Фактический адрес',
        //   value: education.actualAddress,
        //   background: 'white',
        //   size: 12,
        // },
        {
          label: 'Юридический адрес',
          value: education.legalAddress,
          background: 'white',
          size: 12,
        },
        {
          label: 'ИНН',
          value: education.inn,
          background: 'white',
          size: 2,
        },
        // {
        //   label: 'КПП',
        //   value: education.kpp,
        //   background: 'white',
        //   size: 4,
        // },
        {
          label: 'ОГРН',
          value: education.ogrn,
          background: 'white',
          size: 10,
        },
        {
          label:
            'Наименование профессии, специальности, направления подготовки',
          value: education.speciality,
          background: 'white',
          size: 11,
        },
        {
          label: 'Код',
          value: education.specialityCode,
          background: 'white',
          size: 1,
        },
        {
          label: 'Форма обучения',
          value: education.educationType,
          background: 'white',
          size: 8,
        },
        // {
        //   label: 'Уровень образования',
        //   value: education.graduationLevel,
        //   background: 'white',
        //   size: 2,
        // },
        {
          label: 'Дата начала обучения',
          icon: 'pgs-calendar',
          value: formatDate(education.educationStartDate ?? ''),
          background: 'white',
          size: 2,
        },
        {
          label: 'Дата завершения',
          icon: 'pgs-calendar',
          value: formatDate(education.educationEndDate ?? ''),
          background: 'white',
          size: 2,
        },
      ],
    }));

    return {
      label: 'Образование',
      bolder,
      columns: 2,
      children: [...educationLevel, ...diplomas],
    };
  }

  get russianDiplomas(): FormDataSectionProps {
    const bolder = true;
    const diplomas = get(
      this.data,
      'details.educationInfo.russianSpecialities',
      []
    );
    const children = diplomas.map((education: RussianSpeciality) => {
      return {
        label: 'Сведения о дипломе',
        bolder,
        columns: 12,
        children: [
          {
            label: 'Наименование вида документа',
            value: education.code,
            size: 11,
            background: 'white',
            tooltip: `Код вида документа - ${education.codeType}`,
          },
          {
            label: 'Наименование уровня образования',
            value: education.level,
            size: 9,
            background: 'white',
            tooltip: `Код уровня образования - ${education.levelCode}`,
          },
          {
            label: 'Наименование специальности, направления подготовки',
            value: education.speciality,
            size: 3,
            background: 'white',
          },
          {
            label: 'Серия и номер',
            value: `${education.diplomaSeries || ''}/${
              education.diplomaNumber || ''
            }`,
            size: 3,
            background: 'white',
            tooltip: `Код уровня образования - ${education.levelCode}`,
          },
          {
            label: 'Дата выдачи',
            icon: 'pgs-calendar',
            value: formatDate(education.issueDate ?? ''),
            size: 3,
            background: 'white',
          },
          {
            label: 'Регистрационный номер',
            value: education.regNumber,
            size: 3,
            background: 'white',
          },
          {
            label: 'Наименование образовательной организации',
            icon: 'pgs-organizations',
            value: education.org,
            size: 11,
            background: 'white',
          },

          {
            label: 'Код специальности',
            value: education.specialtyCode,
            size: 1,
            background: 'white',
          },
        ],
      };
    });
    return {
      bolder,
      columns: 1,
      label: 'Российские дипломы',
      children,
      class: 'q-mt-sm',
    };
  }

  get foreignDiplomas(): FormDataSectionProps {
    const bolder = true;
    const diplomas = get(
      this.data,
      'details.educationInfo.foreignSpecialities',
      []
    );
    const items = [{}, ...diplomas].map((education: ForeignSpecialities) => {
      return {
        label: 'Сведения о дипломе',
        bolder,
        columns: 12,
        growMode: true,
        children: [
          {
            label: 'Наименование вида документа',
            value: education.code,
            size: 12,
            background: 'white',
          },
          {
            label: 'Наименование уровня образования',
            value: education.level,
            size: 9,
            background: 'white',
          },
          {
            label: 'Специальность',
            value: education.speciality,
            size: 3,
            background: 'white',
          },
          {
            label:
              'Направление подготовки по дополнительному профессиональному образованию',
            value: education.qualification, // вместо levelDop
            size: 9,
            background: 'white',
          },
          {
            label: 'Квалификация, степень',
            value: education.specialityDop,
            size: 3,
            background: 'white',
          },
          {
            label: 'Серия и номер',
            value: education.diplomaSeriesNumber,
            size: 4,
            background: 'white',
          },

          {
            label: 'Наименование образовательной организации',
            icon: 'pgs-organizations',
            value: education.org,
            size: 11,
            background: 'white',
          },

          {
            label: 'Код специальности',
            value: education.specialtyCode,
            size: 1,
            background: 'white',
          },

          {
            label: 'Номер свидетельства о признании документа',
            value: education.sved,
            size: 3,
            background: 'white',
          },
          {
            label: 'Дата признания документа',
            icon: 'pgs-calendar',
            value: formatDate(education.svedDate ?? ''),
            size: 2,
            background: 'white',
          },
          {
            label: 'Наименование страны',
            value: education.oksm,
            size: 3,
            background: 'white',
            tooltip: `Код страны - ${education.oksmCode}`,
          },
          {
            label: 'Регистрационный номер',
            value: education.regNumber,
            size: 3,
            background: 'white',
          },
        ],
      };
    });
    return {
      bolder,
      columns: 1,
      label: 'Иностранные дипломы',
      children: items,
    };
  }

  get deathInfo(): FormDataSectionProps[] {
    const bolder = true;
    return [
      {
        // label: '',
        bolder,
        columns: 2,
        children: [
          {
            label: 'Дата смерти',
            value: formatDate(this.data.details?.deathInfo?.deathDate ?? ''),
            background: 'white',
          },
          {
            label: 'Причина смерти',
            value: this.data.details?.deathInfo?.deathReason,
            background: 'white',
          },
        ],
      },
    ];
  }

  get realEstateInfo(): FormDataSectionProps[] {
    const estates = (this.data.details?.realEstateInfo ?? []).map((estate) => ({
      columns: 4,
      children: [
        {
          label: 'Тип недвижимого имущества',
          value: estate.realEstateType,
          size: 1,
          background: 'white',
        },
        {
          label: 'Адрес недвижимого имущества',
          icon: 'pgs-geo',
          value: estate.address,
          size: 3,
          background: 'white',
        },
      ],
    }));

    return estates.length ? estates : [];
  }

  get commercialInfo(): FormDataSectionProps[] {
    const bolder = true;
    const commercials = (this.data.details?.commercialInfo ?? []).map(
      (commercail) => {
        const isIp = commercail.ipWork;
        const res: FormDataSectionProps = {};
        res.label = isIp ? 'Индивидуальный предприниматель' : 'Самозанятость';
        res.columns = 7;
        res.children = [];
        res.background = 'white';
        res.border = true;
        if (isIp)
          res.children.push({
            label: 'ОГРНИП',
            value: commercail.ipWork?.ogrnip ?? '',
            size: 1,
          });
        res.children.push(
          {
            label: 'Дата начала',
            icon: 'pgs-calendar',
            value: formatDate(
              (isIp
                ? commercail.ipWork?.dateStart
                : commercail.selfWork?.dateStart) ?? ''
            ),
            size: 1,
          },
          {
            label: 'Дата конца',
            icon: 'pgs-calendar',
            value: formatDate(
              (isIp
                ? commercail.ipWork?.dateEnd
                : commercail.selfWork?.dateEnd) ?? ''
            ),
            size: isIp ? 5 : 6,
          }
        );
        return res;
      }
    );
    return [
      {
        bolder,
        label: 'Коммерческая деятельность',
        columns: 1,
        children: commercials,
      },
    ];
  }

  get militaryInfo(): FormDataSectionProps[] {
    const bolder = true;

    if (!this.data.details?.militaryInfo) return [];

    return [
      {
        // label: '',
        bolder,
        columns: 2,
        children: [
          {
            label: 'Признак воинского учёта',
            value: this.getMilitaryFlagLabel(
              this.data.details?.militaryInfo?.militaryFlag ?? ''
            ),
            background: 'white',
          },
          {
            label: 'Факт выдачи документа',
            value: this.data.details?.militaryInfo?.militaryDocument
              ? 'Да'
              : 'Нет',
            background: 'white',
          },
          {
            label: 'Дата выдачи документа',
            value:
              formatDate(
                this.data.details?.militaryInfo?.militaryDocumentDate ?? ''
              ) || '-',
            background: 'white',
          },
          {
            label: 'Код отсрочки',
            value:
              this.data.details?.postponements
                ?.map(({ postponementCode }) => postponementCode)
                .join(', ') ?? '',
            background: 'white',
          },
        ],
      },
    ];
  }

  get foreignInfo(): FormDataSectionProps[] {
    const bolder = true;
    return [
      {
        // label: '',
        bolder,
        columns: 1,
        children: this.data.details?.foreign?.map((foreign) => ({
          columns: 4,
          children: [
            {
              label: 'Страна выезда',
              value: foreign?.countryName,
              background: 'white',
              size: 2,
            },
            {
              label: 'Резиденция',
              value: foreign?.residence,
              background: 'white',
              size: 2,
            },
            {
              size: 3,
              label: 'Причина резиденции',
              value: foreign?.reasonResidence,
              background: 'white',
            },
            {
              size: 1,
              label: 'Дата резиденции',
              value: formatDate(foreign.residenceDate ?? '') || '-',
              background: 'white',
            },
          ],
        })),
      },
    ];
  }

  get medicalInfo(): FormDataSectionProps[] {
    const bolder = true;
    return [
      {
        label: 'Медицинские сведения',
        bolder,
        columns: 1,
        children: [
          {
            label: 'Код состояния здоровья гражданина',
            value: this.getMedType(this.data.details?.med?.code ?? ''),
            background: 'white',
          },
          // {
          //   label: 'Сведения о диспансерном учёте',
          //   value: this.data.details?.med?.dispensary
          //     ? 'Состоит'
          //     : 'Не состоит',
          //   background: 'white',
          // },
        ],
      },
      // {
      //   hide: !this.checkDisability,
      //   label: 'Наличие инвалидности',
      //   bolder,
      //   columns: 12,
      //   children: [
      //     {
      //       label: 'Дата постановки на инвалидность',
      //       icon: 'pgs-calendar',
      //       value: formatDate(this.data.details?.med?.startDate ?? ''),
      //       size: 5,
      //       background: 'white',
      //     },
      //     {
      //       label: 'Плановая дата подтверждения',
      //       icon: 'pgs-calendar',
      //       value: formatDate(this.data.details?.med?.acceptedDate ?? ''),
      //       size: 5,
      //       background: 'white',
      //     },
      //     {
      //       label: 'Группа',
      //       value: this.data.details?.med?.group ?? '',
      //       size: 2,
      //       background: 'white',
      //     },
      //     {
      //       label: 'Наименование организации выдавшей инвалидность',
      //       value: this.data.details?.med?.orgName ?? '',
      //       size: 12,
      //       background: 'white',
      //     },
      //   ],
      // },
    ];
  }

  get sportSections(): FormDataSectionProps[] {
    const sportInfos = get(this.data, 'details.sportInfo', []);

    const children = sportInfos.map((sportInfo: SportInfoV3) => ({
      columns: 9,
      growMode: true,
      children: [
        {
          label: 'Наличие спортивного разряда или звания',
          value: sportInfo.sportLevel ? 'Да' : 'Нет',
          background: 'white',
          size: 2,
        },
        {
          label: 'Вид спорта',
          value: sportInfo.typeName,
          background: 'white',
          size: 7,
        },
        {
          label: 'Наименование спортивного разряда',
          background: 'white',
          value: sportInfo.typeCode,
          size: 9,
        },
        {
          hide: !sportInfo.sportLevel,
          label: 'Наименование спортивной квалификации',
          value: sportInfo.category,
          background: 'white',
          size: 8,
        },
        {
          hide: !sportInfo.sportLevel,
          label: 'Код спортивной квалификации',
          value: sportInfo.categoryCode,
          background: 'white',
          size: 1,
        },
      ],
    }));
    return children;
  }

  get driverLicenseSections(): FormDataSectionProps[] {
    const bolder = true;
    const driverLicenses = get(this.data, 'details.driverLicenses', []);

    const children = driverLicenses.map((driverLicense: DriverLicense) => ({
      columns: 5,
      bolder,
      label: this.getDrivingLicenseName(driverLicense.type),
      growMode: true,
      children: [
        {
          label: 'Серия',
          value: driverLicense.series,
          background: 'white',
        },
        {
          label: 'Номер',
          value: driverLicense.number,
          background: 'white',
        },
        {
          label: 'Дата выдачи',
          icon: 'pgs-calendar',
          value: formatDate(driverLicense.startDate),
          background: 'white',
        },
        {
          label: 'Срок действия',
          icon: 'pgs-decision-date',
          value: `до ${formatDate(driverLicense.endDate) || ''}`,
          background: 'white',
        },
        {
          label: 'Категории',
          value: driverLicense.categories?.join(', ') ?? '',
          background: 'white',
        },
      ],
    }));
    return children;
  }

  get foreignSection(): FormDataSectionProps {
    const bolder = true;
    const foreignData = get(this.data, 'details.foreign', []);

    const children = foreignData.map((foreign: ForeignInfoV3) => ({
      columns: 12,
      growMode: true,
      children: [
        {
          label: 'Наименование государства',
          value: foreign.countryName,
          size: 12,
          background: 'white',
        },
        {
          label: 'Наличие права проживания в иностранном государстве',
          value: foreign.residence,
          size: 9,
          background: 'white',
        },
        {
          label:
            'Дата возникновения права на постоянное проживание на территории иностранного государства',
          icon: 'pgs-calendar',
          value: formatDate(foreign.reasonDate ?? ''),
          size: 3,
          background: 'white',
        },
        {
          label: 'Основание проживания в иностранном государстве (при Иных)',
          value: this.getForeignType(foreign.reasonResidence ?? ''),
          size: 9,
          background: 'white',
        },
        {
          label: 'Дата получения гражданства',
          icon: 'pgs-calendar',
          value: formatDate(foreign.residenceDate ?? ''),
          size: 3,
          background: 'white',
        },
      ],
    }));
    return {
      bolder,
      noPadding: true,
      // label: 'Иностранное гражданство',
      children,
    };
  }

  get criminalSection(): FormDataSectionProps {
    const bolder = true;
    const criminalInfo = get(this.data, 'details.criminalCaseInfo', []);

    const children = criminalInfo.map((criminalInfo: CriminalCaseInfo) => ({
      columns: 12,
      children: [
        {
          label: 'Наименование места отбывания наказания',
          value: criminalInfo?.prisonName || '',
          size: 12,
          background: 'white',
        },
        {
          label: 'Адрес места отбывания наказания',
          value: criminalInfo?.prisonAddress || '',
          size: 6,
          background: 'white',
        },
        {
          label: 'Дата начала отбывания наказания',
          icon: 'pgs-calendar',
          value: formatDate(criminalInfo?.startDate || ''),
          size: 3,
          background: 'white',
        },
        {
          label: 'Дата окончания отбывания наказания',
          icon: 'pgs-calendar',
          value: formatDate(criminalInfo?.endDate || ''),
          size: 3,
          background: 'white',
        },
      ],
    }));
    return {
      bolder,
      label: 'Уголовное преследование',
      children,
    };
  }

  get citizenshipInfo(): FormDataSectionProps {
    return {
      background: 'white',
      columns: 2,
      children: [
        {
          label: 'Дата решения о приобретении гражданства РФ',
          icon: 'pgs-calendar',
          value: formatDate(
            this.data?.details?.citizenshipInfo?.obtainCitizenshipDate || '—'
          ),
        },
        {
          label: 'Дата решения о выходе из гражданства РФ',
          icon: 'pgs-calendar',
          value: formatDate(
            this.data?.details?.citizenshipInfo?.loseCitizenshipDate || '—'
          ),
        },
      ],
    };
  }

  /* get criminalSection(): FormDataSectionProps {
    const bolder = true;
    const criminalRecords = get(
      this.data,
      'details.criminalInfo.criminalRecords',
      []
    );

    // const convictions = get(
    //   this.data,
    //   'details.criminalInfo.convictions',
    //   []

    const children = get(this.data, 'details.criminalInfo', []).map(
      (conviction: CriminalCaseInfo) => ({
        label: 'Сведения об осуждении',
        size: 12,
        columns: 4,
        capsTitle: true,
        border: true,
        children: [
          {
            label: 'Название тюрьмы',
            icon: 'pgs-calendar',
            value: conviction.prisonName,
            background: 'white',
            size: 4,
          },
          {
            label: 'Адрес тюрьмы',
            icon: 'pgs-calendar',
            value: conviction.prisonAddress,
            background: 'white',
            size: 4,
          },
          {
            label: 'Дата осуждения',
            icon: 'pgs-calendar',
            value: formatDate(conviction.startDate ?? '') ?? '-',
            background: 'white',
            size: 2,
          },
          {
            label: 'Дата освобождения',
            icon: 'pgs-calendar',
            value: formatDate(conviction.endDate ?? '') ?? '-',
            background: 'white',
            size: 2,
          },
          // {
          //   label: 'Дата осуждения',
          //   icon: 'pgs-calendar',
          //   value: formatDate(conviction.startDate),
          //   background: 'white',
          //   size: 4,
          // },
          // {
          //   label: 'Наименование суда, вынесшего приговор',
          //   value: conviction.court,
          //   background: 'white',
          //   size: 8,
          // },
          // {
          //   label: 'Пункт, часть, статья УК РФ',
          //   value: conviction.law,
          //   background: 'white',
          //   size: 8,
          // },
          // {
          //   label: 'Срок наказания',
          //   value: conviction.duration,
          //   background: 'white',
          //   size: 4,
          // },
          // {
          //   label: 'Вид наказания',
          //   value: conviction.punishment.name,
          //   background: 'white',
          //   size: 6,
          // },
          // {
          //   label: 'Код вида наказания',
          //   value: conviction.punishment.code,
          //   background: 'white',
          //   size: 2,
          // },
          // {
          //   label: 'Основание освобождения',
          //   value: conviction.endReason,
          //   background: 'white',
          //   size: 10,
          // },
          // {
          //   label: 'Дата освобождения',
          //   value: formatDate(conviction.endDate),
          //   background: 'white',
          //   size: 2,
          // },
          // {
          //   label: 'Основание снятия судимости',
          //   value: conviction.reasonRemoveRecord,
          //   background: 'white',
          //   size: 10,
          // },
          // {
          //   label: 'Дата снятия судимости',
          //   value: formatDate(conviction.dateRemoveRecord),
          //   background: 'white',
          //   size: 2,
          // },
        ],
      })
    );

    // const prosecutions = get(
    //   this.data,
    //   'details.criminalInfo.criminalProsecutions',
    //   []
    // ).map((criminalProsecution: Record<string, any>) => ({
    //   label: 'Сведения об уголовном преследовании',
    //   size: 12,
    //   columns: 12,
    //   capsTitle: true,
    //   border: true,
    //   children: [
    //     {
    //       label: 'Дата возбуждения уголовного дела',
    //       icon: 'pgs-calendar',
    //       value: formatDate(criminalProsecution.startDateOfInvestigation),
    //       background: 'white',
    //       size: 4,
    //     },
    //     {
    //       label: 'Вид уголовного преследования',
    //       value: criminalProsecution.typeOfInvestigation,
    //       background: 'white',
    //       size: 8,
    //     },
    //     {
    //       label: 'Наименование органа, принявшего решение',
    //       value: criminalProsecution.departmentName,
    //       background: 'white',
    //       size: 6,
    //     },
    //     {
    //       label: 'Пункт, часть, статья УК РФ',
    //       value: criminalProsecution.law,
    //       background: 'white',
    //       size: 6,
    //     },
    //     {
    //       label: 'Дата прекращения преследования',
    //       icon: 'pgs-calendar',
    //       value: formatDate(criminalProsecution.endDateOfInvestigation),
    //       background: 'white',
    //       size: 4,
    //     },
    //     {
    //       label: 'Основание прекращения уголовного преследования',
    //       value: criminalProsecution.endReason,
    //       background: 'white',
    //       size: 8,
    //     },
    //   ],
    // }));

    // const wantedInfo = get(this.data, 'details.criminalInfo.wanted');
    // const wantedSections = !wantedInfo
    //   ? []
    //   : [
    //       {
    //         label: 'Сведения о розыске',
    //         size: 12,
    //         columns: 12,
    //         border: true,
    //         capsTitle: true,
    //         children: [
    //           {
    //             label: 'Дата объявления в розыск',
    //             icon: 'pgs-calendar',
    //             value: get(this.data, 'details.criminalInfo.wanted.startDate'),
    //             background: 'white',
    //             size: 4,
    //           },
    //           {
    //             label: 'Пункт, часть, статья УК РФ',
    //             value: get(this.data, 'details.criminalInfo.wanted.law'),
    //             background: 'white',
    //             size: 8,
    //           },
    //           {
    //             label: 'Наименование органа, принявшего решение',
    //             value: get(
    //               this.data,
    //               'details.criminalInfo.wanted.organization'
    //             ),
    //             background: 'white',
    //             size: 12,
    //           },
    //         ],
    //       },
    //     ];

    // const children = criminalRecords.map(
    //   (criminalRecord: Record<string, string>) => ({
    //     columns: 12,
    //     noPadding: true,
    //     children: [
    //       {
    //         label: 'Судимость',
    //         value: criminalRecord.record,
    //         size: 10,
    //         background: 'white',
    //       },
    //       {
    //         label: 'Код судимости',
    //         value: criminalRecord.recordCode,
    //         size: 2,
    //         background: 'white',
    //       },
    //       ...convictions,
    //       ...prosecutions,
    //       ...wantedSections,
    //     ],
    //   })
    // );
    return {
      bolder,
      label: 'Сведения о судимости',
      children,
    };
  } */
}
</script>
