import { defineStore } from 'pinia'
import { ref, reactive, computed } from 'vue'
import { useUsersStore } from '@/stores/usersStore'
import { useGlobalStore } from '@/stores/globalStore'

export const usePiyangoStore = defineStore('piyangoStore', () => {
  const usersStore = useUsersStore()
  const globalStore = useGlobalStore()

  const isNew = ref<boolean>(true)
  const lotteryId = ref<number | null>(null)
  const selectedLottery = ref<number | null>(null)
  const lotteryApprove = ref<number | null>(null)
  const lotteryDrawState = ref<boolean>(false)
  const lotteryDrawDate = ref<string | Date>('')
  const lotteryIlanTarihi = ref<string | Date | null>('')
  const lotteryFirstApproveDate = ref<string | Date | null>('')
  const lotteryCreationDate = ref<string | Date>('')
  const lotteryStateDate = ref<string | Date>('')
  const lotteryPurposeId = ref<number | null>(null)
  const lotteryBasvuruBedeliStatus = ref<boolean | null>(null)
  const lotteryIzinBedeliStatus = ref<boolean | null>(null)
  const subCustomerType = ref<number | null>(null)
  const customerApproved = ref<boolean>(false)
  const lotteryYetkiRefresh = ref<boolean>(false)

  const lotteryStatusTypes = ref<Record<string, any>[]>([
    { name: 'Bekliyor', class: 'waiting' },
    { name: 'Kapsam Dışı', class: 'waiting' },
    { name: 'Onaylandı', class: 'ok' },
    { name: 'İzin Verildi', class: 'ok' },
    { name: 'Kampanya Olumlu Bitti', class: 'ok' },
    { name: 'Katılımcı Listesi Yüklendi', class: 'next' },
    { name: 'Bilgi/Belge Eksik/Yanlış', class: 'waiting' },
    { name: 'Başvuru İşleme Alındı', class: 'waiting' },
    { name: 'Düzenleme Bekliyor', class: 'waiting' },
    { name: 'Üzerinde Çalışılıyor', class: 'waiting' },
    { name: 'Ön Kayıt Kabul Edildi', class: 'waiting' },
    { name: 'Yardım Amaçlı Piyango Son Onay', class: 'waiting' },
    { name: 'İnceleme Bekleniyor', class: 'beforeok' },
    { name: 'Yeni Piyango', class: 'new' },
    { name: 'Başvuru Reddedildi', class: 'alert' },
    { name: 'Başvuru Uygun Görülmedi', class: 'alert' },
    { name: 'İzin Öncesi İptal', class: 'alert' },
    { name: 'İzin Sonrası İptal', class: 'alert' },
    { name: 'Ceza Verildi', class: 'alert' },
    { name: 'Değişiklik Talep Ediliyor', class: 'change' }
  ])

  const baseLotteryData = reactive<Record<string, any>>({
    amac: '',
    amacpiyangoId: null,
    duzenleyenId: null,
    baslik: '',
    baglisirketId: null,
    cekilisSartveSekilleri: '',
    kapsamIl: [] as string[],
    kapsamIlce: [] as string[],
    baslangicTarihi: '',
    bitisTarihi: '',
    asilSonBasvuruTarihi: '',
    yedekSonBasvuruTarihi: '',
    cekilisTarihi: '',
    ilantarihi: '',
    ilantarihi2: '',
    ikramiyeTeslimTarihi: '',
    ilanEdilecekGazete: '',
    ilId: null,
    ilceId: null,
    adres: '',
    katilimListesi: '',
    katilimciListesiTeslimYontemiId: null,
    cekilisYontemiId: null,
    digerHususlar: ''
  })

  const lotteryData = reactive<Record<string, any>>({})
  const safeLotteryData = reactive<Record<string, any>>({})
  const duzenleyenData = reactive<Record<string, any>>({})
  const araciUyeData = reactive<Record<string, any>>({})
  const lotterySelectedProvience = ref<string>('')

  const UyeName = (data: Record<string, any>): string => {
    if (data.basvuruTipId === 18) return `${data.gercekAdi} ${data.gercekSoyadi}`
    else if (data.basvuruTipId === 21) return `${data.tuzelUnvan}`
    else if (data.basvuruTipId === 22) return `${data.dernekUnvan}`
    else if (data.basvuruTipId === 23) return `${data.sirketUnvan}`
    else if (data.basvuruTipId === 26) return `${data.kamuUnvan}`
    return ''
  }

  const duzenleyenLink = computed<string | null>(() => {
    if (lotteryData.baglisirketId === null && lotteryData.duzenleyenId !== null)
      return '/uyeler/detay/' + lotteryData.duzenleyenId + '/uye-bilgileri'
    else if (lotteryData.duzenleyenId !== null && lotteryData.baglisirketId !== null)
      return (
        '/uyeler/detay/' +
        lotteryData.baglisirketId +
        '/yetkili-uye/detay/' +
        lotteryData.duzenleyenId +
        '/kisi-kurum-bilgileri'
      )
    else return null
  })

  const araciLink = computed<string>(() => {
    return '/uyeler/detay/' + lotteryData.baglisirketId
  })

  const CheckForYardimAmacli = (): boolean => {
    return (
      usersStore.isVakifDernek ||
      (usersStore.isAraciFirma && subCustomerType.value === 22)
    )
  }

  const isLotteryForCharity = computed((): boolean => {
    return lotteryPurposeId.value === 2
  })

  const ResetLotteryData = () => {
    globalStore.ResetObject(lotteryData, baseLotteryData)
    Object.assign(lotteryData, baseLotteryData)
    lotteryApprove.value = null
    selectedLottery.value = null
    lotteryData.kapsamIl.splice(0, lotteryData.kapsamIl.length)
    lotteryData.kapsamIlce.splice(0, lotteryData.kapsamIlce.length)
  }

  const ResetLotteryContent = () => {
    Object.assign(lotteryData, baseLotteryData)
  }

  const GetIslemStatusClass = (statusName: string | undefined): string => {
    if (!statusName) {
      return 'islem-status-default'
    }
    // Her duruma benzersiz canlı renkler atanıyor
    const statusMap: Record<string, string> = {
      'Bilgi/Belge Eksik/Yanlış': 'islem-status-coral',
      'Üzerinde Çalışılıyor': 'islem-status-amber',
      'Başvuru İşleme Alındı': 'islem-status-sky',
      'Başvuru Uygun Görülmedi': 'islem-status-rose',
      'İzin Öncesi İptal': 'islem-status-pink',
      'Kapsam Dışı': 'islem-status-slate',
      'İzin Verildi': 'islem-status-emerald',
      'Ceza Verildi': 'islem-status-red',
      'İzin Sonrası İptal': 'islem-status-salmon',
      'Kampanya Olumlu Bitti': 'islem-status-mint',
      'Mükerrer Başvuru': 'islem-status-peach',
      'Bekliyor': 'islem-status-yellow',
      'Onaylandı': 'islem-status-teal',
      'Katılımcı Listesi Yüklendi': 'islem-status-cyan',
      'Düzenleme Bekliyor': 'islem-status-orange',
      'Ön Kayıt Kabul Edildi': 'islem-status-blue',
      'Yardım Amaçlı Piyango Son Onay': 'islem-status-gold',
      'İnceleme Bekleniyor': 'islem-status-lavender',
      'Yeni Piyango': 'islem-status-violet',
      'Başvuru Reddedildi': 'islem-status-crimson',
      'Değişiklik Talep Ediliyor': 'islem-status-indigo'
    }
    return statusMap[statusName] || 'islem-status-default'
  }

  const LoterryStatusClass = (d: any): string => {
    // Yeni renk sistemini kullan, ama back-grad sınıfı ekle (geriye dönük uyumluluk için)
    const statusClass = GetIslemStatusClass(d)
    return 'islem-status-badge ' + statusClass
  }

  const SetLotteryControlData = (data: Record<string, any>) => {
    lotteryApprove.value = data.onayDurum
    lotteryDrawDate.value = data.cekilisTarihi
    lotteryDrawState.value = data.cekilisDuzenlemeDurum
    lotteryStateDate.value = data.sonIslemTarihi
    lotteryPurposeId.value = data.piyangoAmacId
    lotteryFirstApproveDate.value = data.ilkIzinTarihi
    lotteryBasvuruBedeliStatus.value = data.basvuruBedeliDurum
    lotteryIzinBedeliStatus.value = data.izinBedeliDurum
  }
  return {
    isNew,
    lotteryId,
    baseLotteryData,
    selectedLottery,
    lotteryApprove,
    lotteryDrawState,
    lotteryDrawDate,
    lotteryIlanTarihi,
    lotteryFirstApproveDate,
    lotteryCreationDate,
    lotteryStateDate,
    lotteryBasvuruBedeliStatus,
    lotteryIzinBedeliStatus,
    subCustomerType,
    lotteryPurposeId,
    isLotteryForCharity,
    lotteryYetkiRefresh,
    lotteryData,
    safeLotteryData,
    duzenleyenData,
    araciUyeData,
    lotterySelectedProvience,
    customerApproved,
    duzenleyenLink,
    araciLink,
    UyeName,
    CheckForYardimAmacli,
    ResetLotteryData,
    ResetLotteryContent,
    LoterryStatusClass,
    GetIslemStatusClass,
    SetLotteryControlData
  }
})
