import { ref, computed } from 'vue' import { fetchAllOrders, type AdminOrder } from '@/api/admin' import { PAID_GROUP_STATUSES } from '@/constants/orderStatus' export type AdminOrderFilter = | 'all' | 'processing' | 'paid_group' | 'pending_payment' export function useAdminOrders() { const orders = ref([]) const loading = ref(true) const error = ref('') const activeFilter = ref('all') const searchQuery = ref('') const stats = computed(() => { const total = orders.value.length const todo = orders.value.filter((o) => o.status === 'processing').length const paid = orders.value.filter((o) => PAID_GROUP_STATUSES.includes( o.status as (typeof PAID_GROUP_STATUSES)[number], ), ).length const pending = orders.value.filter( (o) => o.status === 'pending_payment', ).length return { total, todo, paid, pending } }) const filteredOrders = computed(() => { let result = orders.value if (activeFilter.value === 'processing') { result = result.filter((o) => o.status === 'processing') } else if (activeFilter.value === 'paid_group') { result = result.filter((o) => PAID_GROUP_STATUSES.includes( o.status as (typeof PAID_GROUP_STATUSES)[number], ), ) } else if (activeFilter.value === 'pending_payment') { result = result.filter((o) => o.status === 'pending_payment') } const query = searchQuery.value.trim().toLowerCase() if (query) { result = result.filter( (o) => o.id.toLowerCase().includes(query) || o.plate.toLowerCase().includes(query), ) } return result }) async function loadOrders() { loading.value = true error.value = '' try { orders.value = await fetchAllOrders() } catch { error.value = 'Kunde inte hämta beställningar. Försök igen senare.' } finally { loading.value = false } } function replaceOrder(updated: AdminOrder) { const index = orders.value.findIndex((o) => o.id === updated.id) if (index !== -1) { orders.value[index] = updated } } return { orders, loading, error, activeFilter, searchQuery, stats, filteredOrders, loadOrders, replaceOrder, } }