import { api } from './api'; import type { AusruestungArtikel, AusruestungArtikelFormData, AusruestungAnfrageDetailResponse, AusruestungAnfrageFormItem, AusruestungOverview, AusruestungKategorie, AusruestungEigenschaft, AusruestungAnfrage, AusruestungWidgetOverview, CreateOrdersRequest, CreateOrdersResponse, } from '../types/ausruestungsanfrage.types'; export const ausruestungsanfrageApi = { // ── Categories (DB-backed, hierarchical) ── getKategorien: async (): Promise => { const r = await api.get('/api/ausruestungsanfragen/kategorien'); return r.data.data; }, createKategorie: async (name: string, parentId?: number | null): Promise => { const r = await api.post('/api/ausruestungsanfragen/kategorien', { name, parent_id: parentId ?? null }); return r.data.data; }, updateKategorie: async (id: number, data: { name?: string; parent_id?: number | null }): Promise => { const r = await api.patch(`/api/ausruestungsanfragen/kategorien/${id}`, data); return r.data.data; }, deleteKategorie: async (id: number): Promise => { await api.delete(`/api/ausruestungsanfragen/kategorien/${id}`); }, // ── Catalog Items ── getItems: async (filters?: { kategorie?: string; kategorie_id?: number; aktiv?: boolean }): Promise => { const params = new URLSearchParams(); if (filters?.kategorie) params.set('kategorie', filters.kategorie); if (filters?.kategorie_id) params.set('kategorie_id', String(filters.kategorie_id)); if (filters?.aktiv !== undefined) params.set('aktiv', String(filters.aktiv)); const r = await api.get(`/api/ausruestungsanfragen/items?${params.toString()}`); return r.data.data; }, getItem: async (id: number): Promise => { const r = await api.get(`/api/ausruestungsanfragen/items/${id}`); return r.data.data; }, createItem: async (data: AusruestungArtikelFormData): Promise => { const r = await api.post('/api/ausruestungsanfragen/items', data); return r.data.data; }, updateItem: async (id: number, data: Partial): Promise => { const r = await api.patch(`/api/ausruestungsanfragen/items/${id}`, data); return r.data.data; }, deleteItem: async (id: number): Promise => { await api.delete(`/api/ausruestungsanfragen/items/${id}`); }, getCategories: async (): Promise => { const r = await api.get('/api/ausruestungsanfragen/categories'); return r.data.data; }, // ── Item Eigenschaften (characteristics) ── getArtikelEigenschaften: async (artikelId: number): Promise => { const r = await api.get(`/api/ausruestungsanfragen/items/${artikelId}/eigenschaften`); return r.data.data; }, upsertArtikelEigenschaft: async ( artikelId: number, data: { eigenschaft_id?: number; name: string; typ: string; optionen?: string[]; pflicht?: boolean; sort_order?: number }, ): Promise => { const r = await api.post(`/api/ausruestungsanfragen/items/${artikelId}/eigenschaften`, data); return r.data.data; }, deleteArtikelEigenschaft: async (eigenschaftId: number): Promise => { await api.delete(`/api/ausruestungsanfragen/eigenschaften/${eigenschaftId}`); }, // ── Requests ── getRequests: async (filters?: { status?: string }): Promise => { const params = new URLSearchParams(); if (filters?.status) params.set('status', filters.status); const r = await api.get(`/api/ausruestungsanfragen/requests?${params.toString()}`); return r.data.data; }, getMyRequests: async (): Promise => { const r = await api.get('/api/ausruestungsanfragen/requests/my'); return r.data.data; }, getRequest: async (id: number): Promise => { const r = await api.get(`/api/ausruestungsanfragen/requests/${id}`); return r.data.data; }, createRequest: async ( items: AusruestungAnfrageFormItem[], notizen?: string, bezeichnung?: string, fuer_benutzer_id?: string, fuer_benutzer_name?: string, ): Promise => { const r = await api.post('/api/ausruestungsanfragen/requests', { items, notizen, bezeichnung, fuer_benutzer_id, fuer_benutzer_name }); return r.data.data; }, updateRequest: async ( id: number, data: { bezeichnung?: string; notizen?: string; items?: AusruestungAnfrageFormItem[] }, ): Promise => { const r = await api.patch(`/api/ausruestungsanfragen/requests/${id}`, data); return r.data.data; }, updateRequestStatus: async (id: number, status: string, admin_notizen?: string): Promise => { const r = await api.patch(`/api/ausruestungsanfragen/requests/${id}/status`, { status, admin_notizen }); return r.data.data; }, deleteRequest: async (id: number): Promise => { await api.delete(`/api/ausruestungsanfragen/requests/${id}`); }, // ── Position delivery tracking ── updatePositionGeliefert: async (positionId: number, geliefert: boolean): Promise => { await api.patch(`/api/ausruestungsanfragen/positionen/${positionId}/geliefert`, { geliefert }); }, // ── Linking ── linkToOrder: async (anfrageId: number, bestellungId: number): Promise => { await api.post(`/api/ausruestungsanfragen/requests/${anfrageId}/link`, { bestellung_id: bestellungId }); }, unlinkFromOrder: async (anfrageId: number, bestellungId: number): Promise => { await api.delete(`/api/ausruestungsanfragen/requests/${anfrageId}/link/${bestellungId}`); }, // ── Create orders from request ── createOrders: async (anfrageId: number, payload: CreateOrdersRequest): Promise => { const r = await api.post(`/api/ausruestungsanfragen/requests/${anfrageId}/create-orders`, payload); return r.data.data; }, // ── Overview ── getOverview: async (): Promise => { const r = await api.get('/api/ausruestungsanfragen/overview'); return r.data.data; }, // ── Widget overview ── getWidgetOverview: async (): Promise => { const r = await api.get('/api/ausruestungsanfragen/widget-overview'); return r.data.data; }, // ── Users ── getOrderUsers: async (): Promise> => { const r = await api.get('/api/ausruestungsanfragen/users'); return r.data.data; }, };