import { defineStore } from 'pinia' import { ref } from 'vue' import api from '../api/axios' /** * Payload shape for creating a new expense via POST /expenses/ */ export interface AddExpensePayload { asset_id: string organization_id?: number | null // Auto-resolved by backend from asset if omitted category_id: number amount_net: number currency?: string date: string mileage_at_cost?: number | null description?: string | null data?: Record } /** * Response shape from POST /expenses/ */ export interface ExpenseResponse { status: string id: string asset_id: string cost_category: string amount_net: number date: string } export const useCostStore = defineStore('cost', () => { // ── State ────────────────────────────────────────────────────────── const isSubmitting = ref(false) const lastError = ref(null) const lastSuccess = ref(null) // ── Actions ──────────────────────────────────────────────────────── /** * Add a new expense (fuel, fee, or other cost) via POST /expenses/. * Used by SimpleFuelModal, ComplexExpenseModal, and the dashboard cost card. */ async function addExpense(payload: AddExpensePayload): Promise { isSubmitting.value = true lastError.value = null lastSuccess.value = null try { // Build request body — omit organization_id if not provided (backend resolves it) const body: Record = { asset_id: payload.asset_id, category_id: payload.category_id, amount_net: payload.amount_net, currency: payload.currency || 'HUF', date: payload.date, mileage_at_cost: payload.mileage_at_cost ?? null, description: payload.description || null, data: payload.data || {}, } if (payload.organization_id != null) { body.organization_id = payload.organization_id } const res = await api.post('/expenses/', body) const responseData = res.data as ExpenseResponse lastSuccess.value = responseData console.log('[CostStore] Expense created successfully:', responseData) return responseData } catch (err: any) { const message = err.response?.data?.detail || err.response?.data?.message || 'Nem sikerült rögzíteni a költséget. Ellenőrizd a kapcsolatot.' lastError.value = message console.error('[CostStore] addExpense error:', err) return null } finally { isSubmitting.value = false } } /** * Clear the last error and success state. */ function resetState() { lastError.value = null lastSuccess.value = null } return { // State isSubmitting, lastError, lastSuccess, // Actions addExpense, resetState, } })