import { ref, toValue } from 'vue' import { useApi } from '~/composables/useApi' import type { MaybeRef } from 'vue' export interface VersionEntry { version: number action: 'create' | 'update' | 'restore' | string createdAt: string actor: { id: string; label: string } | null diff: Record | null } export interface RestorePreview { version: number restoreMode: 'full' | 'partial' diff: Record warnings: Array<{ field: string message: string missingEntityId: string | null missingEntityName: string | null }> snapshot: Record } export interface RestoreResult { success: boolean newVersion: number restoredFromVersion: number restoreMode: 'full' | 'partial' warnings: RestorePreview['warnings'] } const ENTITY_ENDPOINTS: Record = { machine: '/machines', composant: '/composants', piece: '/pieces', product: '/products', } interface Deps { entityType: MaybeRef entityId: MaybeRef } export function useEntityVersions(deps: Deps) { const { get, post } = useApi() const versions = ref([]) const loading = ref(false) const error = ref(null) const getPath = () => { const type = toValue(deps.entityType) const id = toValue(deps.entityId) const base = ENTITY_ENDPOINTS[type] return `${base}/${id}` } const fetchVersions = async () => { loading.value = true error.value = null try { const result = await get(`${getPath()}/versions`) if (!result.success) { error.value = result.error ?? 'Impossible de charger les versions.' versions.value = [] return } versions.value = result.data?.items ?? [] } catch (err: any) { error.value = err?.message ?? 'Erreur inconnue' versions.value = [] } finally { loading.value = false } } const fetchPreview = async (version: number): Promise => { const result = await get(`${getPath()}/versions/${version}/preview`) if (!result.success || !result.data) { return null } return result.data } const restore = async (version: number): Promise => { const result = await post(`${getPath()}/versions/${version}/restore`, {}) if (!result.success || !result.data) { return null } return result.data } return { versions, loading, error, fetchVersions, fetchPreview, restore } }