import { defineStore } from 'pinia'
import { ref, reactive } from 'vue'
import { useValidationStore } from '@/stores/validationStore'
import { usePiyangoDosyaKapamaStore } from '../stores/piyangoDosyaKapamaStore'

export const usePiyangoDosyaKapamaValidationStore = defineStore(
  'piyangoDosyaKapamaValidationStore',
  () => {
    const piyangoDosyaKapamaStore = usePiyangoDosyaKapamaStore()
    const validationStore = useValidationStore()

    const isFormValid = ref<boolean>(true)
    const invalidTexts = reactive<Record<string, any>>({})
    const isIkramiyeFormValid = ref<boolean>(true)
    const ikramiyeInvalidTexts = reactive<Record<string, any>>({})

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

      validationStore.IsFieldEmpty(
        piyangoDosyaKapamaStore.dosyaKapamaData,
        invalidTexts,
        'mecraAdi',
        'Yayınlanacak mecranın adını yazınız.'
      )

      isFormValid.value = Object.keys(invalidTexts).length === 0
      return isFormValid.value
    }

    const IkramiyeFormCheck = (): boolean => {
      Object.assign(ikramiyeInvalidTexts, {})

      validationStore.IsFieldEmpty(
        piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData,
        ikramiyeInvalidTexts,
        'tahhutEdilenIkramiye',
        'Lütfen taahhüt edilen ikramiyeyi seçiniz.'
      )

      if (
        validationStore.checkEmpty(
          piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.tahhutEdilenIkramiyeAdet
        )
      ) {
        isIkramiyeFormValid.value = false
        ikramiyeInvalidTexts.tahhutEdilenIkramiye =
          'Lütfen taahhüt edilen ikramiyeyi seçiniz.'
      }

      if (
        validationStore.checkEmpty(
          piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeAsil
        ) &&
        validationStore.checkEmpty(
          piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeYedek
        )
      ) {
        isIkramiyeFormValid.value = false
        ikramiyeInvalidTexts.teslimEdilenIkramiyeAsil =
          'Yedek ve asil talihli alanlarının en az biri dolu olmalıdır'
        ikramiyeInvalidTexts.teslimEdilenIkramiyeYedek =
          'Yedek ve asil talihli alanlarının en az biri dolu olmalıdır'
      }

      if (
        !validationStore.checkEmpty(
          piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeAsil
        ) &&
        !validationStore.checkEmpty(
          piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeYedek
        )
      ) {
        if (
          Number(
            piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeAsil
          ) +
            Number(
              piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.teslimEdilenIkramiyeYedek
            ) !==
          Number(piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.tahhutEdilenIkramiyeAdet)
        ) {
          isIkramiyeFormValid.value = false
          ikramiyeInvalidTexts.teslimEdilenIkramiyeAsil =
            'Asil ve yedek talihli toplamları, toplam ikramiye adedi kadar olmalıdır.'
          ikramiyeInvalidTexts.teslimEdilenIkramiyeYedek =
            'Asil ve yedek talihli toplamları, toplam ikramiye adedi kadar olmalıdır.'
        }
      }

      validationStore.IsFieldEmpty(
        piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData,
        ikramiyeInvalidTexts,
        'alinmayanIkramiye',
        'Alınmayan ikramiye adedi boş olamaz. En az 1 asil veya yedek ikramiye adedi giriniz.'
      )

      if (
        !validationStore.checkEmpty(
          piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.alinmayanIkramiye
        )
      ) {
        if (
          Number(piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.alinmayanIkramiye) < 0
        ) {
          isIkramiyeFormValid.value = false
          ikramiyeInvalidTexts.alinmayanIkramiye =
            'Teslim edilen asil ve yedek ikramiye toplamları, toplam ikramiye kadar olmalıdır.'
        }
      }

      isIkramiyeFormValid.value = Object.keys(ikramiyeInvalidTexts).length === 0
      return isIkramiyeFormValid.value
    }

    return {
      isFormValid,
      invalidTexts,
      isIkramiyeFormValid,
      ikramiyeInvalidTexts,
      FormCheck,
      IkramiyeFormCheck
    }
  }
)
