import { defineStore } from 'pinia'
import { ref, reactive, computed } from 'vue'
import { useValidationStore } from '@/stores/validationStore'
import { usePiyangoOnayStore } from '../stores/piyangoOnayStore'
import { usePiyangoDataStore } from '../stores/piyangoDataStore'

export const usePiyangoOnayValidationStore = defineStore(
  'piyangoOnayValidationStore',
  () => {
    const validationStore = useValidationStore()
    const piyangoOnayStore = usePiyangoOnayStore()
    const piyangoDataStore = usePiyangoDataStore()

    const formChanged = ref<boolean>(false)
    const isFormValid = ref<boolean>(true)
    const invalidTexts = reactive<Record<string, any>>({})
    const isPanelFormValid = ref<boolean>(true)
    const invalidTextsPanel = reactive<Record<string, any>>({})

    const kapsamDisiId = computed<number | null>(() => {
      const kapsamDisi = piyangoDataStore.piyangoOnayDurumlari.find(
        (item: Record<string, any>) => item.tipAdi === 'Kapsam Dışı'
      )
      return kapsamDisi ? kapsamDisi.islemId : null
    })

    const shouldValidateIzinFields = (islemTipiId: number | null): boolean => {
      return islemTipiId === 4 || islemTipiId === kapsamDisiId.value
    }

    const FormCheck = (): boolean => {
      Object.assign(invalidTexts, {})

      validationStore.IsFieldEmpty(
        piyangoOnayStore.piyangoOnayForm,
        invalidTexts,
        'onayDurumuIslemTipiId',
        'Bir işlem tipi seçmelisinz.'
      )
      if (shouldValidateIzinFields(piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId)) {
        validationStore.IsFieldEmpty(
          piyangoOnayStore.piyangoOnayForm,
          invalidTexts,
          'izinSayisi',
          'İzin sayısı girmelisiniz.'
        )
        validationStore.IsFieldEmpty(
          piyangoOnayStore.piyangoOnayForm,
          invalidTexts,
          'izinTarihi',
          'İzin tarihi seçmelisiniz.'
        )
      }
      if (
        piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === 4 ||
        piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === kapsamDisiId.value
      ) {
        validationStore.IsFieldEmpty(
          piyangoOnayStore.piyangoOnayForm,
          invalidTexts,
          'mudurlukId',
          'Müdürlük seçmelisiniz.'
        )
      }
      if (piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === 4) {
        validationStore.IsFieldEmpty(
          piyangoOnayStore.piyangoOnayForm,
          invalidTexts,
          'cekilisGorevlisiId',
          'Çekiliş görevlisi seçmelisiniz.'
        )
      }
      if (piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === kapsamDisiId.value) {
        validationStore.IsFieldEmpty(
          piyangoOnayStore.piyangoOnayForm,
          invalidTexts,
          'kapsamDisiSebebi',
          'Kapsam dışı sebebi seçmelisiniz.'
        )
      }
      isFormValid.value = Object.keys(invalidTexts).length === 0
      return isFormValid.value
    }

    const FormPanelCheck = (): boolean => {
      Object.assign(invalidTextsPanel, {})

      validationStore.IsFieldEmpty(
        piyangoOnayStore.piyangoPanelOnayForm,
        invalidTextsPanel,
        'onayDurumuIslemTipiId',
        'Bir işlem tipi seçmelisinz.'
      )
      if (shouldValidateIzinFields(piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId)) {
        validationStore.IsFieldEmpty(
          piyangoOnayStore.piyangoPanelOnayForm,
          invalidTextsPanel,
          'izinSayisi',
          'İzin sayısı girmelisiniz.'
        )
        validationStore.IsFieldEmpty(
          piyangoOnayStore.piyangoPanelOnayForm,
          invalidTextsPanel,
          'izinTarihi',
          'İzin tarihi seçmelisiniz.'
        )
      }
      if (
        piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId === 4 ||
        piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId === kapsamDisiId.value
      ) {
        validationStore.IsFieldEmpty(
          piyangoOnayStore.piyangoPanelOnayForm,
          invalidTextsPanel,
          'mudurlukId',
          'Müdürlük seçmelisiniz.'
        )
      }
      if (piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId === 4) {
        validationStore.IsFieldEmpty(
          piyangoOnayStore.piyangoPanelOnayForm,
          invalidTextsPanel,
          'cekilisGorevlisiId',
          'Çekiliş görevlisi seçmelisiniz.'
        )
      }
      if (piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId === kapsamDisiId.value) {
        validationStore.IsFieldEmpty(
          piyangoOnayStore.piyangoPanelOnayForm,
          invalidTextsPanel,
          'kapsamDisiSebebi',
          'Kapsam dışı sebebi seçmelisiniz.'
        )
      }
      isPanelFormValid.value = Object.keys(invalidTextsPanel).length === 0
      return isPanelFormValid.value
    }

    return {
      formChanged,
      isFormValid,
      isPanelFormValid,
      invalidTexts,
      invalidTextsPanel,
      FormCheck,
      FormPanelCheck
    }
  }
)
