'use client'

import { create } from 'zustand'
import { devtools } from 'zustand/middleware'

import { Toast } from '@/components/ui/Toast'
import ServiceInstance, { apiUrl } from '@/utils/ClientRequest'

export interface DocumentState {
    dashboardCounts: any | null
    isLoading: boolean

    getDashboardCounts: (
        callback?: (s: boolean) => void,
        isToast?: boolean
    ) => Promise<void>

}

export const useDashboardStore = create<DocumentState>()(
    devtools((set) => ({
        dashboardCounts: [],
        isLoading: false,


        /* ================= DASHBOARD COUNTS ================= */
        getDashboardCounts: async (callback, isToast = false) => {
            set({ isLoading: true })
            try {
                const { data } = await ServiceInstance.get(
                    `${apiUrl.dashboard}`
                )

                const success = Boolean(data?.meta?.status)

                if (success) {
                    set({ dashboardCounts: data.data })
                } else {
                    set({ dashboardCounts: null })
                }

                isToast &&
                    Toast(success ? 'success' : 'error', data?.meta?.message)

                callback?.(success)
            } catch (error: any) {
                Toast('error', error?.message || 'Fetch failed')
                callback?.(false)
            } finally {
                set({ isLoading: false })
            }
        },
    }))
)
