import { defineStore } from 'pinia'
import { ref, reactive } from 'vue'
import { useValidationStore } from '@/stores/validationStore'
import { usePiyangoKatilimciStore } from '../stores/piyangoKatilimciStore'
import { usePiyangoStore } from '../stores/piyangoStore'
import { useDateStore } from '@/stores/dateStore'

export const usePiyangoKatilimciValidationStore = defineStore(
  'piyangoKatilimciValidationStore',
  () => {
    const piyangoKatilimciStore = usePiyangoKatilimciStore()
    const validationStore = useValidationStore()
    const piyangoStore = usePiyangoStore()
    const dateStore = useDateStore()

    const userFormChanged = ref<boolean>(false)
    const isUserFormValid = ref<boolean>(true)
    const isFileFormValid = ref<boolean>(true)
    const userFormInvalidTexts = reactive<Record<string, any>>({})
    const fileFormInvalidTexts = reactive<Record<string, any>>({})

    const FileFormCheck = (): boolean => {
      Object.assign(userFormInvalidTexts, {})

      validationStore.IsFieldEmpty(
        piyangoKatilimciStore.piyangoKatilimciFileFormData,
        fileFormInvalidTexts,
        'excelFile',
        'Lütfen dosya seçiniz'
      )

      isFileFormValid.value = Object.keys(fileFormInvalidTexts).length === 0
      return isFileFormValid.value
    }

    const UserFormCheck = (): boolean => {
      Object.assign(userFormInvalidTexts, {})

      validationStore.IsFieldEmpty(
        piyangoKatilimciStore.piyangoKatilimciUserFormData,
        userFormInvalidTexts,
        'eposta',
        'Lütfen e-posta adresini giriniz.'
      )

      if (
        !validationStore.checkEmpty(
          piyangoKatilimciStore.piyangoKatilimciUserFormData.eposta
        )
      ) {
        if (
          !validationStore.checkEmail(
            piyangoKatilimciStore.piyangoKatilimciUserFormData.eposta
          )
        ) {
          userFormInvalidTexts.eposta =
            'Lütfen eposta adresinizi doğru formatta giriniz. Örn: isim@alanadi.td'
          isUserFormValid.value = false
        } else {
          delete userFormInvalidTexts.eposta
        }
      }

      if (
        !validationStore.checkEmpty(
          piyangoKatilimciStore.piyangoKatilimciUserFormData.telefonNo
        )
      ) {
        if (piyangoKatilimciStore.piyangoKatilimciUserFormData.telefonNo.length !== 10) {
          userFormInvalidTexts.telefonNo =
            'Telefon Numaranız başında 0 olmadan 10 haneden oluşmalıdır.'
          isUserFormValid.value = false
        } else {
          delete userFormInvalidTexts.telefonNo
        }
      }

      validationStore.IsFieldEmpty(
        piyangoKatilimciStore.piyangoKatilimciUserFormData,
        userFormInvalidTexts,
        'adi',
        'Lütfen adını giriniz.'
      )

      validationStore.IsFieldEmpty(
        piyangoKatilimciStore.piyangoKatilimciUserFormData,
        userFormInvalidTexts,
        'sifreCode',
        'Lütfen katılım kodunu giriniz.'
      )

      validationStore.IsFieldEmpty(
        piyangoKatilimciStore.piyangoKatilimciUserFormData,
        userFormInvalidTexts,
        'soyadi',
        'Lütfen soyadını giriniz.'
      )

      validationStore.IsFieldEmpty(
        piyangoKatilimciStore.piyangoKatilimciUserFormData,
        userFormInvalidTexts,
        'cekilisHakkiAdedi',
        'Lütfen çekiliş hakkı adedini giriniz.'
      )

      if (
        !validationStore.checkEmpty(
          piyangoKatilimciStore.piyangoKatilimciUserFormData.cekilisHakkiAdedi
        )
      ) {
        const hakAdedi = Number(
          piyangoKatilimciStore.piyangoKatilimciUserFormData.cekilisHakkiAdedi
        )

        if (!Number.isInteger(hakAdedi) || hakAdedi < 1) {
          userFormInvalidTexts.cekilisHakkiAdedi =
            'Çekiliş hakkı adedi en az 1 olmalıdır.'
          isUserFormValid.value = false
        } else {
          delete userFormInvalidTexts.cekilisHakkiAdedi
        }
      }

      var today: Date | string = new Date()
      today = dateStore.dateFormat({
        date: today,
        pattern: 'yy-mm-dd'
      })

      var ilanTarihi: string = dateStore.dateFormat({
        date: piyangoStore.lotteryIlanTarihi!,
        pattern: 'yy-mm-dd'
      })

      if (
        (piyangoStore.lotteryDrawState || today === ilanTarihi) &&
        piyangoStore.lotteryApprove === 4 &&
        piyangoStore.lotteryData.cekilisYontemiId === 1
      ) {
        if (
          ((piyangoKatilimciStore.piyangoKatilimciUserFormData.asilTalihli ||
              piyangoKatilimciStore.piyangoKatilimciUserFormData.yedekTalihli) &&
            piyangoKatilimciStore.piyangoKatilimciUserFormData.ikramiyeId === null) ||
          (!piyangoKatilimciStore.piyangoKatilimciUserFormData.asilTalihli &&
            !piyangoKatilimciStore.piyangoKatilimciUserFormData.yedekTalihli &&
            piyangoKatilimciStore.piyangoKatilimciUserFormData.ikramiyeId !== null)
        ) {
          userFormInvalidTexts.ikramiyeId =
            'Talihli tipi ve hediye seçimi birlikte yapılmış olmalıdır.'
          isUserFormValid.value = false
        } else {
          delete userFormInvalidTexts.ikramiyeId
        }
      }
      isUserFormValid.value = Object.keys(userFormInvalidTexts).length === 0
      return isUserFormValid.value
    }

    return {
      userFormChanged,
      isUserFormValid,
      isFileFormValid,
      userFormInvalidTexts,
      fileFormInvalidTexts,
      FileFormCheck,
      UserFormCheck
    }
  }
)
