<template>
  <AdminLayout>
    <Breadcrumb currentPageText="Muhasebe / Piyango Listesi" go="/" />
    <section class="section-list">
      <list-table-content
        v-if="loaded"
        :tableHeader="tableHeader"
        :rowAction="OpenPiyango"
        icon="draws"
        title="Piyangolar"
        listText="Piyango"
        :apiList="'Cekilis/GetCekilislerListMuhasebe/'"
        apiText="Piyango Listesi"
        isUseRoute />
    </section>
  </AdminLayout>
</template>
<script setup lang="ts">
  import { ref, computed, onBeforeMount } from 'vue'

  import AdminLayout from '@/layouts/AdminLayout.vue'
  import { useDateStore } from '@/stores/dateStore'

  const dateStore = useDateStore()
  import { useUsersStore } from '@/stores/usersStore'
  const usersStore = useUsersStore()
  import { useGlobalStore } from '@/stores/globalStore'
  const globalStore = useGlobalStore()
  import { usePiyangoStore } from '@/module/cekilisler/stores/piyangoStore'
  const piyangoStore = usePiyangoStore()
  import { usePiyangoDataStore } from '@/module/cekilisler/stores/piyangoDataStore'
  const piyangoDataStore = usePiyangoDataStore()
  import { usePiyangoServices } from '@/module/cekilisler/service/piyangoServices'
  const piyangoServices = usePiyangoServices()

  import router from '@/router'

  const loaded = ref<boolean>(false)

  const cekilisYontemleri = computed<Record<string, any>[]>(() => {
    return piyangoDataStore.cekilisYontemi
  })

  const piyangoAmaclari = computed<Record<string, any>[]>(() => {
    return piyangoDataStore.piyangoAmaclari
  })

  const piyangoOnayDurumlari = computed<Record<string, any>[]>(() => {
    return piyangoDataStore.piyangoOnayDurumlari
  })

  const tableHeader = computed<Record<string, any>[]>(() => {
    let header: Record<string, any>[] = []

    // 1. PİYANGO ID
    header.push({
      name: 'piyangoId',
      title: 'Piyango ID',
      sort: true,
      style: { width: '10%' }
    })

    // 2. OLUŞTURMA TARİHİ
    header.push({
      name: 'olusturmaTarihi',
      title: 'Oluşturma Tarihi',
      compute: (v: Record<string, any>): string => {
        if (!v.olusturmaTarihi || v.olusturmaTarihi === null || v.olusturmaTarihi.includes('0001-')) return ''
        return dateStore.dateFormat({ date: v.olusturmaTarihi, pattern: 'dd-mm-yy', splitDate: '/' })
      },
      sort: true,
      filter: {
        type: 'date',
        between: true
      }
    })

    // 3. SEVK DURUMU
    header.push({
      name: 'atanmis',
      title: 'Sevk Durumu',
      computeHtml: (v: Record<string, any>): string => {
        if (v.atanmis) {
          return `<strong class="back-grad back-grad-sevk-ok">
            ${v.atananlar}
          </strong>`
        } else {
          return `<span class="back-grad back-grad-sevk">
            Sevk Edilmemiş</span>`
        }
      }
    })

    // 4. MUHASEBELEŞTİRME DURUMU
    header.push({
      name: 'basvuruBedelNo',
      title: 'Muhasebeleştirme Durumu',
      computeHtml: (v: Record<string, any>): string => {
        let durum = ''
        if (v.basvuruBedelNo !== null) {
          durum += `<strong">Başvuru Bedel No: </strong>
            ${v.basvuruBedelNo}<br>`
        }
        if (v.izinBedelNo !== null) {
          durum += `<strong">İzin Bedel No: </strong>
            ${v.izinBedelNo}`
        }
        return durum
      }
    })

    // 5. MÜDÜRLÜK
    header.push({
      name: 'mudurluk',
      title: 'Müdürlük',
      compute: (v: Record<string, any>): string => {
        return v.mudurluk || ''
      }
    })

    // 6. PİYANGO AMACI
    header.push({
      name: 'piyangoamac',
      title: 'Piyango Amacı',
      sort: true,
      filter: {
        type: 'select',
        data: piyangoAmaclari.value,
        listVal: 'id',
        listText: 'amacAdi',
        filterId: 'piyangoAmacId'
      }
    })

    // 7. DÜZENLEYEN (koşullu)
    if (usersStore.isAraciFirma || usersStore.isPanelUser) {
      header.push({ name: 'duzenleyen', title: 'Düzenleyen' })
    }

    // 8. ARACI FİRMA
    header.push({
      name: 'araciFirma',
      title: 'Aracı Firma',
      compute: (v: Record<string, any>): string => {
        return v.araciFirma || ''
      }
    })

    // 6. DURUM
    header.push({
      name: 'durum',
      title: 'Durum',
      style: { width: '10%' },
      computeHtml: (v: Record<string, any>): string => {
        return `<span class="${piyangoStore.LoterryStatusClass(v.durum)}">
              ${v.durum}
            </span>`
      },
      filter: {
        type: 'select',
        data: piyangoOnayDurumlari.value,
        listVal: 'id',
        listText: 'tipAdi',
        filterId: 'durumId'
      }
    })

    // 7. İZİN TARİHİ
    header.push({
      name: 'izinTarihi',
      title: 'İzin Tarihi',
      compute: (v: Record<string, any>): string => {
        if (!v.izinTarihi || v.izinTarihi === null) return ''
        return dateStore.dateFormat({ date: v.izinTarihi, pattern: 'dd-mm-yy', splitDate: '/' })
      },
      sort: true,
      filter: {
        type: 'date',
        between: true
      }
    })

    // 8. İZİN SAYISI
    header.push({
      name: 'izinSayisi',
      title: 'İzin Sayısı',
      compute: (v: Record<string, any>): string => {
        return v.izinSayisi || ''
      },
      sort: true
    })

    // 9. BAŞLANGIÇ TARİHİ
    header.push({
      name: 'baslangicTarihi',
      title: 'Başlangıç Tarihi',
      compute: (v: Record<string, any>): string => {
        if (!v.baslangicTarihi || v.baslangicTarihi.includes('0001-')) return ''
        return dateStore.dateFormat({ date: v.baslangicTarihi, pattern: 'dd-mm-yy', splitDate: '/' })
      },
      sort: true,
      filter: {
        type: 'date',
        between: true
      }
    })

    // 10. BİTİŞ TARİHİ
    header.push({
      name: 'bitisTarihi',
      title: 'Bitiş Tarihi',
      compute: (v: Record<string, any>): string => {
        if (!v.bitisTarihi || v.bitisTarihi.includes('0001-')) return ''
        return dateStore.dateFormat({ date: v.bitisTarihi, pattern: 'dd-mm-yy', splitDate: '/' })
      },
      sort: true,
      filter: {
        type: 'date',
        between: true
      }
    })

    // 11. ÇEKİLİŞ TARİHİ
    header.push({
      name: 'cekilisTarihi',
      title: 'Çekiliş Tarihi',
      compute: (v: Record<string, any>): string => {
        if (!v.cekilisTarihi || v.cekilisTarihi.includes('0001-')) return ''
        if (v.piyangoAmacId === 3) return ''
        return dateStore.dateFormat({ date: v.cekilisTarihi, pattern: 'dd-mm-yy', splitDate: '/' })
      },
      sort: true,
      filter: {
        type: 'date',
        between: true
      }
    })


    // 12. ÇEKİLİŞ GÖREVLİSİ
    header.push({
      name: 'cekilisGorevlisi',
      title: 'Çekiliş Görevlisi',
      compute: (v: Record<string, any>): string => {
        return v.cekilisGorevlisi || ''
      }
    })

    // 13. GAZETE İLAN TARİHİ
    header.push({
      name: 'gazeteIlanTarihi',
      title: 'Gazete İlan Tarihi',
      compute: (v: Record<string, any>): string => {
        if (!v.gazeteIlanTarihi || v.gazeteIlanTarihi === null) return ''
        return dateStore.dateFormat({ date: v.gazeteIlanTarihi, pattern: 'dd-mm-yy', splitDate: '/' })
      },
      sort: true,
      filter: {
        type: 'date',
        between: true
      }
    })

    // 14. GAZETE ADI
    header.push({
      name: 'gazeteAdi',
      title: 'Gazete Adı',
      compute: (v: Record<string, any>): string => {
        return v.gazeteAdi || ''
      }
    })

    // 15. İZİN BEDELİ
    header.push({
      name: 'izinBedeliTutari',
      title: 'İzin Bedeli',
      compute: (v: Record<string, any>): string => {
        if (v.izinBedeliTutari === null || v.izinBedeliTutari === undefined) return ''
        return globalStore.toTrLocale(v.izinBedeliTutari)
      },
      sort: true
    })

    // 16. İKRAMİYE TUTARI
    header.push({
      name: 'ikramiyeTutari',
      title: 'İkramiye Tutarı',
      compute: (v: Record<string, any>): string => {
        if (v.ikramiyeTutari === null || v.ikramiyeTutari === undefined) return ''
        return globalStore.toTrLocale(v.ikramiyeTutari)
      },
      sort: true
    })

    // 17. TEMİNAT TARİHİ
    header.push({
      name: 'teminatTarihi',
      title: 'Teminat Tarihi',
      compute: (v: Record<string, any>): string => {
        if (!v.teminatTarihi || v.teminatTarihi === null) return ''
        return dateStore.dateFormat({ date: v.teminatTarihi, pattern: 'dd-mm-yy', splitDate: '/' })
      },
      sort: true
    })

    // 18. TEMİNAT SAYISI
    header.push({
      name: 'teminatSayisi',
      title: 'Teminat Sayısı',
      compute: (v: Record<string, any>): string => {
        return v.teminatSayisi || ''
      },
      sort: true
    })

    // 19. TEMİNAT BANKASI
    header.push({
      name: 'teminatBankasi',
      title: 'Teminat Bankası',
      compute: (v: Record<string, any>): string => {
        return v.teminatBankasi || ''
      }
    })

    // 20. TEMİNAT TUTARI
    header.push({
      name: 'teminatTutari',
      title: 'Teminat Tutarı',
      compute: (v: Record<string, any>): string => {
        if (v.teminatTutari === null || v.teminatTutari === undefined) return ''
        return globalStore.toTrLocale(v.teminatTutari)
      },
      sort: true
    })

    // 21. T. PARA CİNSİ
    header.push({
      name: 'paraBirimiSembol',
      title: 'T. Para Cinsi',
      compute: (v: Record<string, any>): string => {
        return v.paraBirimiSembol || ''
      }
    })

    // 22. T. İADE TARİHİ
    header.push({
      name: 'teminatIadeTarihi',
      title: 'T. İade Tarihi',
      compute: (v: Record<string, any>): string => {
        if (!v.teminatIadeTarihi || v.teminatIadeTarihi === null) return ''
        return dateStore.dateFormat({ date: v.teminatIadeTarihi, pattern: 'dd-mm-yy', splitDate: '/' })
      },
      sort: true
    })

    // 23. T. İADE SAYISI
    header.push({
      name: 'teminatIadeSayisi',
      title: 'T. İade Sayısı',
      compute: (v: Record<string, any>): string => {
        return v.teminatIadeSayisi || ''
      },
      sort: true
    })

    // 24. İKRAMİYELER
    header.push({
      name: 'ikramiyeler',
      title: 'İkramiyeler',
      style: { width: '15%' },
      compute: (v: Record<string, any>): string => {
        return v.ikramiyeler || ''
      }
    })


    return header
  })

  // tablodan herhangi bir satır tıklayınca çalısır
  const OpenPiyango = (row: any) => {
    router.push('/muhasebe/piyango-detay/' + row.id + '/piyango-bilgileri')
  }

  onBeforeMount(async () => {
    await piyangoServices.GetCekilisYontemiList()
    await piyangoServices.GetPiyangoAmaclariList()
    await piyangoServices.GetPiyangoOnayDurumList()

    loaded.value = true
  })
</script>
