'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 PolicyComplianceState {
    policyCompliance: any | null
    isLoading: boolean

    getPolicyComplianceReview: (
        payload: any,
        callback?: (s: boolean) => void,
        isToast?: boolean
    ) => Promise<void>
    clearPolicyCompliance: () => void
}

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

        /* ================= GET POLICY COMPLIANCE ================= */
        getPolicyComplianceReview: async (
            payload,
            callback,
            isToast = true
        ) => {
            set({ isLoading: true })
            try {
                const responce = await ServiceInstance.post(
                    `${apiUrl.policyComplianceReview}`,
                    payload
                )

                const success = Boolean(responce?.data?.meta?.status)
                isToast &&
                    Toast(
                        success ? 'success' : 'error',
                        responce?.data?.meta?.message
                    )
                if (success) {
                    set({ policyCompliance: responce?.data })
                } else {
                    set({ policyCompliance: null })
                }
                callback?.(success)
            } catch (error: any) {
                Toast('error', error?.message || 'Fetch failed')
                callback?.(false)
            } finally {
                set({ isLoading: false })
            }
        },

        clearPolicyCompliance: () => {
            set({ policyCompliance: null })
        }
    }))
)
