import { defineStore } from 'pinia'
import { ref, reactive } from 'vue'
import { useValidationStore } from '@/stores/validationStore'
import { useGlobalDataStore } from '@/stores/globalDataStore'
import { useDataStore } from '@/stores/dataStore'
import { useRoute } from 'vue-router'

export const useUyeBilgileriStore = defineStore('uyeBilgileriStore', () => {
  const validationStore = useValidationStore()
  const globalDataStore = useGlobalDataStore()
  const dataStore = useDataStore()
  const route = useRoute()

  const formChanged = ref<boolean>(false)
  const isFormValid = ref<boolean>(true)
  const invalidTexts = reactive<Record<string, any>>({})
  
  const ilceList = ref<Record<string,any>[]>([])
  const mahalleList = ref<Record<string,any>[]>([])

  const baseCustomerData = reactive<Record<string, any>>({
    basvuruTipId: null,
    gercekAdi: '',
    gercekSoyadi: '',
    gercekTCKN: '',
    gercekVergiDairesi: '',
    gercekVergiNo: '',
    gercekOdaKayitNo: '',
    gercekTicariUnvan: '',
    tuzelUnvan: '',
    tuzelVergiDairesi: '',
    tuzelVergiNo: '',
    tuzelSicilNo: '',
    dernekUnvan: '',
    dernekVergiDairesi: '',
    dernekVergiNo: '',
    dernekSicilNo: '',
    sirketUnvan: '',
    sirketVergiDairesi: '',
    sirketVergiNo: '',
    sirketSicilNo: '',
    sirketMersis: '',
    kamuUnvan: '',
    kamuVergiDairesi: '',
    kamuVergiNo: '',
    kamuSicilNo: '',
    email: '',
    telefonNumarasi: '',
    kvkk: false,
    uyelikSozlesmesi: false,
    ilId: null,
    ilceId: null,
    mahalleId: null,
    postaKodu: '',
    adres: '',
    internetSitesi: '',
    islemTipi: null,
    aciklama: '',
    parentUserId: null,
    password: '',
    confirmPassword: ''
  })

  const formData = reactive<Record<string, any>>({})
  const safeData = reactive<Record<string, any>>({})

  const ResetStore = () => {
    if (route.meta.authpage as boolean) {
      baseCustomerData.kvkk = false
      baseCustomerData.uyelikSozlesmesi = false
      baseCustomerData.password = ''
      baseCustomerData.confirmPassword = ''
    }
    Object.assign(formData, baseCustomerData)
    Object.assign(invalidTexts, {})
    ilceList.value = []
    mahalleList.value = []
    formChanged.value = false
    isFormValid.value = true
  }

  const ChangeKullaniciTipi = (e: Event, d: string | number) => {
    /*var gercekData = {
      gercekAdi: '',
      gercekSoyadi: '',
      gercekTCKN: '',
      gercekVergiDairesi:'',
      gercekVergiNo:'',
      gercekTicariUnvan: ''
    }
    var tuzelData = {
      tuzelUnvan: '',
      tuzelVergiDairesi: '',
      tuzelVergiNo: '',
      tuzelSicilNo: ''
    }
    var dernekData = {
      dernekUnvan: '',
      dernekVergiDairesi: '',
      dernekVergiNo: '',
      dernekSicilNo: ''
    }
    if (d === 1) {
      Object.assign(formData, gercekData)
    } else {
      Object.keys(gercekData).forEach((key) => {
        delete formData[key]
      })
    }
    if (d === 2) {
      Object.assign(formData, tuzelData)
    } else {
      Object.keys(tuzelData).forEach((key) => {
        delete formData[key]
      })
    }
    if (d === 3) {
      Object.assign(formData, dernekData)
    } else {
      Object.keys(dernekData).forEach((key) => {
        delete formData[key]
      })
    }*/
    ResetFormItems();
    formChanged.value = true
  }

  const ResetFormItems = () => {
    if (formData.basvuruTipId === 18) {
      ;(formData.tuzelUnvan = ''),
        (formData.tuzelVergiDairesi = ''),
        (formData.tuzelVergiNo = ''),
        (formData.tuzelSicilNo = ''),
        (formData.dernekUnvan = ''),
        (formData.dernekVergiDairesi = ''),
        (formData.dernekVergiNo = ''),
        (formData.dernekSicilNo = ''),
        (formData.sirketUnvan = ''),
        (formData.sirketVergiDairesi = ''),
        (formData.sirketVergiNo = ''),
        (formData.sirketSicilNo = ''),
        (formData.sirketMersis = ''),
        (formData.kamuUnvan = ''),
        (formData.kamuVergiDairesi = ''),
        (formData.kamuVergiNo = ''),
        (formData.kamuSicilNo = '')
    } else if (formData.basvuruTipId === 21) {
      ;(formData.gercekAdi = ''),
        (formData.gercekSoyadi = ''),
        (formData.gercekTCKN = ''),
        (formData.gercekVergiDairesi = ''),
        (formData.gercekVergiNo = ''),
        (formData.gercekOdaKayitNo = ''),
        (formData.gercekTicariUnvan = ''),
        (formData.dernekUnvan = ''),
        (formData.dernekVergiDairesi = ''),
        (formData.dernekVergiNo = ''),
        (formData.dernekSicilNo = ''),
        (formData.sirketUnvan = ''),
        (formData.sirketVergiDairesi = ''),
        (formData.sirketVergiNo = ''),
        (formData.sirketSicilNo = ''),
        (formData.sirketMersis = ''),
        (formData.kamuUnvan = ''),
        (formData.kamuVergiDairesi = ''),
        (formData.kamuVergiNo = ''),
        (formData.kamuSicilNo = '')
    } else if (formData.basvuruTipId === 22) {
      ;(formData.gercekAdi = ''),
        (formData.gercekSoyadi = ''),
        (formData.gercekTCKN = ''),
        (formData.gercekVergiDairesi = ''),
        (formData.gercekVergiNo = ''),
        (formData.gercekOdaKayitNo = ''),
        (formData.gercekTicariUnvan = ''),
        (formData.tuzelUnvan = ''),
        (formData.tuzelVergiDairesi = ''),
        (formData.tuzelVergiNo = ''),
        (formData.tuzelSicilNo = ''),
        (formData.sirketUnvan = ''),
        (formData.sirketVergiDairesi = ''),
        (formData.sirketVergiNo = ''),
        (formData.sirketSicilNo = ''),
        (formData.sirketMersis = ''),
        (formData.kamuUnvan = ''),
        (formData.kamuVergiDairesi = ''),
        (formData.kamuVergiNo = ''),
        (formData.kamuSicilNo = '')
    } else if (formData.basvuruTipId === 23) {
      ;(formData.gercekAdi = ''),
        (formData.gercekSoyadi = ''),
        (formData.gercekTCKN = ''),
        (formData.gercekVergiDairesi = ''),
        (formData.gercekVergiNo = ''),
        (formData.gercekOdaKayitNo = ''),
        (formData.gercekTicariUnvan = ''),
        (formData.tuzelUnvan = ''),
        (formData.tuzelVergiDairesi = ''),
        (formData.tuzelVergiNo = ''),
        (formData.tuzelSicilNo = ''),
        (formData.dernekUnvan = ''),
        (formData.dernekVergiDairesi = ''),
        (formData.dernekVergiNo = ''),
        (formData.dernekSicilNo = ''),
        (formData.kamuUnvan = ''),
        (formData.kamuVergiDairesi = ''),
        (formData.kamuVergiNo = ''),
        (formData.kamuSicilNo = '')
    } else if (formData.basvuruTipId === 26) {
      ;(formData.gercekAdi = ''),
        (formData.gercekSoyadi = ''),
        (formData.gercekTCKN = ''),
        (formData.gercekVergiDairesi = ''),
        (formData.gercekVergiNo = ''),
        (formData.gercekOdaKayitNo = ''),
        (formData.gercekTicariUnvan = ''),
        (formData.tuzelUnvan = ''),
        (formData.tuzelVergiDairesi = ''),
        (formData.tuzelVergiNo = ''),
        (formData.tuzelSicilNo = ''),
        (formData.dernekUnvan = ''),
        (formData.dernekVergiDairesi = ''),
        (formData.dernekVergiNo = ''),
        (formData.dernekSicilNo = ''),
        (formData.sirketUnvan = ''),
        (formData.sirketVergiDairesi = ''),
        (formData.sirketVergiNo = ''),
        (formData.sirketSicilNo = ''),
        (formData.sirketMersis = '')
    }
  }
  const SetIlIlce = async () => {
    if (
      formData.ilId !== undefined &&
      formData.ilId !== null &&
      formData.ilId !== '' &&
      formData.ilceId !== undefined &&
      formData.ilceId !== null &&
      formData.ilceId !== ''
    ) {
      const ilceler = await dataStore.GetIlcelerByIlId(formData.ilId)
      ilceList.value.splice(0, ilceList.value.length, ...ilceler)
    } else {
      ilceList.value = []
      formData.ilceId = ''
    }

    if (
      formData.ilceId !== undefined &&
      formData.ilceId !== null &&
      formData.ilceId !== '' &&
      formData.mahalleId !== undefined &&
      formData.mahalleId !== null &&
      formData.mahalleId !== ''
    ) {
      const mahalleler = await dataStore.GetMahallelerByIlceId(formData.ilceId)
      mahalleList.value.splice(0, mahalleList.value.length, ...mahalleler)
    } else {
      mahalleList.value = []
      formData.mahalleId = ''
    }
  }
  const SetbasvuruTip = () => {
    if (
      formData.basvuruTipId === undefined &&
      formData.basvuruTipId === null &&
      formData.basvuruTipId === ''
    )
      formData.basvuruTipId = 0
  }

  const IsFieldEmpty = (field: string, text: string) => {
    if (validationStore.checkEmpty(formData[field])) {
      invalidTexts[field] = text
      isFormValid.value = false
    } else {
      delete invalidTexts[field]
    }
  }

  const RestoreForm = () => {
    Object.assign(formData, safeData)
    formChanged.value = false
  }

  const FormCheck = (): boolean => {
    IsFieldEmpty('basvuruTipId', 'Lütfen başvuru tipini seçiniz')

    if (validationStore.checkEmpty(formData.email)) {
      invalidTexts.email = 'Eposta alanı boş bırakılamaz.'
      isFormValid.value = false
    } else {
      delete invalidTexts.email
      if (!validationStore.checkEmail(formData.email)) {
        invalidTexts.email =
          'Lütfen eposta adresinizi doğru formatta giriniz. Örn: isim@alanadi.td'
        isFormValid.value = false
      } else {
        delete invalidTexts.email
      }
    }

    IsFieldEmpty('telefonNumarasi', 'Telefon alanı boş bırakılamaz')
    if (!validationStore.checkEmpty(formData.telefonNumarasi)) {
      if (formData.telefonNumarasi.length !== 10) {
        invalidTexts.telefonNumarasi =
          'Telefon numaranızı başında 0 olmadan 10 hane olarak giriniz.'
        isFormValid.value = false
      } else {
        delete invalidTexts.telefonNumarasi
      }
    }
    IsFieldEmpty('ilId', 'Lütfen il seçiniz')
    IsFieldEmpty('ilceId', 'Lütfen ilçe seçiniz')
    IsFieldEmpty('mahalleId', 'Lütfen mahalle seçiniz')
    IsFieldEmpty('adres', 'Adres alanı boş bırakılamaz')

    if (formData.basvuruTipId === 18) {
      IsFieldEmpty('gercekAdi', 'Bu alan boş bırakılamaz')
      IsFieldEmpty('gercekSoyadi', 'Bu alan boş bırakılamaz')
      IsFieldEmpty('gercekTCKN', 'Bu alan boş bırakılamaz')
      if (!validationStore.checkEmpty(formData.gercekTCKN)) {
        if (formData.gercekTCKN.length !== 11) {
          invalidTexts.gercekTCKN =
            'Lütfen 11 hane olacak şekilde TC Kimlik Numaranızı yazınız'
          isFormValid.value = false
        } else {
          delete invalidTexts.gercekTCKN
        }
      }
      IsFieldEmpty('gercekVergiDairesi', 'Bu alan boş bırakılamaz')
      IsFieldEmpty('gercekVergiNo', 'Bu alan boş bırakılamaz')
      if (!validationStore.checkEmpty(formData.gercekVergiNo)) {
        if (formData.gercekVergiNo.length !== 10) {
          invalidTexts.gercekVergiNo = 'Vergi numaranızı 10 hane olarak giriniz.'
          isFormValid.value = false
        } else {
          delete invalidTexts.gercekVergiNo
        }
      }
      IsFieldEmpty('gercekOdaKayitNo', 'Bu alan boş bırakılamaz')
    }
    if (formData.basvuruTipId === 21) {
      IsFieldEmpty('tuzelUnvan', 'Bu alan boş bırakılamaz')
      IsFieldEmpty('tuzelVergiDairesi', 'Bu alan boş bırakılamaz')
      IsFieldEmpty('tuzelVergiNo', 'Bu alan boş bırakılamaz')
      if (!validationStore.checkEmpty(formData.tuzelVergiNo)) {
        if (formData.tuzelVergiNo.length < 10 || formData.tuzelVergiNo.length > 11) {
          invalidTexts.tuzelVergiNo = 'Vergi numaranızı kontrol ediniz.'
          isFormValid.value = false
        } else {
          delete invalidTexts.tuzelVergiNo
        }
      }
      IsFieldEmpty('tuzelSicilNo', 'Bu alan boş bırakılamaz')
    }

    if (formData.basvuruTipId === 22) {
      IsFieldEmpty('dernekUnvan', 'Bu alan boş bırakılamaz')
      IsFieldEmpty('dernekVergiDairesi', 'Bu alan boş bırakılamaz')
      IsFieldEmpty('dernekVergiNo', 'Bu alan boş bırakılamaz')
      if (!validationStore.checkEmpty(formData.dernekVergiNo)) {
        if (formData.dernekVergiNo.length < 10 || formData.dernekVergiNo.length > 11) {
          invalidTexts.dernekVergiNo = 'Vergi numaranızı kontrol ediniz'
          isFormValid.value = false
        } else {
          delete invalidTexts.dernekVergiNo
        }
      }
      IsFieldEmpty('dernekSicilNo', 'Bu alan boş bırakılamaz')
    }

    if (formData.basvuruTipId === 23) {
      IsFieldEmpty('sirketUnvan', 'Bu alan boş bırakılamaz')
      IsFieldEmpty('sirketVergiDairesi', 'Bu alan boş bırakılamaz')
      IsFieldEmpty('sirketVergiNo', 'Bu alan boş bırakılamaz')

      if (!validationStore.checkEmpty(formData.sirketVergiNo)) {
        if (formData.sirketVergiNo.length < 10 || formData.sirketVergiNo.length > 11) {
          invalidTexts.sirketVergiNo = 'Vergi numaranızı kontrol ediniz'
          isFormValid.value = false
        } else {
          delete invalidTexts.sirketVergiNo
        }
      }
      IsFieldEmpty('sirketSicilNo', 'Bu alan boş bırakılamaz')
    }

    if (formData.basvuruTipId === 26) {
      IsFieldEmpty('kamuUnvan', 'Bu alan boş bırakılamaz')
      IsFieldEmpty('kamuVergiDairesi', 'Bu alan boş bırakılamaz')
      IsFieldEmpty('kamuVergiNo', 'Bu alan boş bırakılamaz')
      if (!validationStore.checkEmpty(formData.kamuVergiNo)) {
        if (formData.kamuVergiNo.length < 10 || formData.kamuVergiNo.length > 11) {
          invalidTexts.kamuVergiNo = 'Vergi numaranızı kontrol ediniz.'
          isFormValid.value = false
        } else {
          delete invalidTexts.kamuVergiNo
        }
      }
    }

    if (!validationStore.checkEmpty(formData.postaKodu)) {
      if (formData.postaKodu.length !== 5) {
        invalidTexts.postaKodu = 'Posta kodu 5 hane olmalıdır.'
        isFormValid.value = false
      } else {
        delete invalidTexts.postaKodu
      }
    }

    if (route.meta.authpage as boolean) {
      IsFieldEmpty('password', 'Bir parola belirlemelisiniz')
      IsFieldEmpty(
        'confirmPassword',
        'Lütfen bu alana girdiğiniz parolayı tekrar giriniz.'
      )

      if (!validationStore.checkEmpty(formData.password)) {
        if (formData.password.length < 6) {
          invalidTexts.password = 'Girdiğiniz parola en az 6 haneli olmalıdır.'
        } else {
          delete invalidTexts.password
        }
      }

      if (!validationStore.checkEmpty(formData.confirmPassword)) {
        if (formData.confirmPassword.length < 6) {
          invalidTexts.confirmPassword =
            'Girdiğiniz parola doğrulama değeri en az 6 haneli olmalıdır.'
        } else {
          delete invalidTexts.password
        }

        if (formData.confirmPassword !== formData.password) {
          invalidTexts.confirmPassword =
            'Girdiğiniz değer Parola alanı ile aynı olmalıdır'
          isFormValid.value = false
        } else {
          delete invalidTexts.confirmPassword
        }
      }

      if (!formData.kvkk) {
        invalidTexts.kvkk = 'KVKK aydınlatma metnini kabul etmelisiniz'
        isFormValid.value = false
      } else {
        delete invalidTexts.kvkk
      }

      if (!formData.uyelikSozlesmesi) {
        invalidTexts.uyelikSozlesmesi = 'Üyelik sözleşmesini kabul etmelisiniz'
        isFormValid.value = false
      } else {
        delete invalidTexts.uyelikSozlesmesi
      }
    }

    return isFormValid.value
  }

  return {
    formChanged,
    isFormValid,
    invalidTexts,
    ilceList,
    mahalleList,
    formData,
    safeData,
    ResetStore,
    ChangeKullaniciTipi,
    SetIlIlce,
    SetbasvuruTip,
    ResetFormItems,
    RestoreForm,
    FormCheck
  }
})
