import { create } from 'zustand'; import type { TaskStatus, Priority, EquipmentType, RevisionType, RMAStatus, RMASolution, UserRole, } from '@/types'; import { settingsApi } from '@/services/settings.api'; interface ConfigState { taskStatuses: TaskStatus[]; priorities: Priority[]; equipmentTypes: EquipmentType[]; revisionTypes: RevisionType[]; rmaStatuses: RMAStatus[]; rmaSolutions: RMASolution[]; userRoles: UserRole[]; isLoading: boolean; isLoaded: boolean; fetchConfig: () => Promise; getTaskStatusById: (id: string) => TaskStatus | undefined; getPriorityById: (id: string) => Priority | undefined; getEquipmentTypeById: (id: string) => EquipmentType | undefined; getRevisionTypeById: (id: string) => RevisionType | undefined; getRMAStatusById: (id: string) => RMAStatus | undefined; getRMASolutionById: (id: string) => RMASolution | undefined; getUserRoleById: (id: string) => UserRole | undefined; } export const useConfigStore = create((set, get) => ({ taskStatuses: [], priorities: [], equipmentTypes: [], revisionTypes: [], rmaStatuses: [], rmaSolutions: [], userRoles: [], isLoading: false, isLoaded: false, fetchConfig: async () => { if (get().isLoaded) return; set({ isLoading: true }); try { const [ taskStatusesRes, prioritiesRes, equipmentTypesRes, revisionTypesRes, rmaStatusesRes, rmaSolutionsRes, userRolesRes, ] = await Promise.all([ settingsApi.getTaskStatuses(), settingsApi.getPriorities(), settingsApi.getEquipmentTypes(), settingsApi.getRevisionTypes(), settingsApi.getRMAStatuses(), settingsApi.getRMASolutions(), settingsApi.getUserRoles(), ]); set({ taskStatuses: taskStatusesRes.data, priorities: prioritiesRes.data, equipmentTypes: equipmentTypesRes.data, revisionTypes: revisionTypesRes.data, rmaStatuses: rmaStatusesRes.data, rmaSolutions: rmaSolutionsRes.data, userRoles: userRolesRes.data, isLoading: false, isLoaded: true, }); } catch { set({ isLoading: false }); } }, getTaskStatusById: (id) => get().taskStatuses.find((s) => s.id === id), getPriorityById: (id) => get().priorities.find((p) => p.id === id), getEquipmentTypeById: (id) => get().equipmentTypes.find((t) => t.id === id), getRevisionTypeById: (id) => get().revisionTypes.find((t) => t.id === id), getRMAStatusById: (id) => get().rmaStatuses.find((s) => s.id === id), getRMASolutionById: (id) => get().rmaSolutions.find((s) => s.id === id), getUserRoleById: (id) => get().userRoles.find((r) => r.id === id), }));