import { defineStore } from 'pinia' import { assignRelease, createRelease, deleteAssignment, deleteRelease, deleteVehicle, fetchAssignments, fetchReleases, fetchVehicles, registerVehicle, updateAssignment, updateRelease, updateVehicle } from '../services/api' export const useDashboardStore = defineStore('dashboard', { state: () => ({ releases: [], vehicles: [], assignments: [], loading: false, releaseLoading: false, vehicleLoading: false, assignmentLoading: false }), getters: { latestRelease(state) { return state.releases[0]?.manifest ?? null }, onlineVehicles(state) { return state.vehicles.filter((item) => item.online).length }, waitingTasks(state) { return state.assignments.filter((item) => item.taskStatus === 'WAITING_CONFIRM').length }, successTasks(state) { return state.assignments.filter((item) => item.taskStatus === 'SUCCESS').length } }, actions: { async loadAll() { this.loading = true this.releaseLoading = true this.vehicleLoading = true this.assignmentLoading = true try { const [releases, vehicles, assignments] = await Promise.all([ fetchReleases(), fetchVehicles(), fetchAssignments() ]) this.releases = releases this.vehicles = vehicles this.assignments = assignments } finally { this.loading = false this.releaseLoading = false this.vehicleLoading = false this.assignmentLoading = false } }, async loadReleases() { this.releaseLoading = true try { this.releases = await fetchReleases() } finally { this.releaseLoading = false } }, async loadVehicles() { this.vehicleLoading = true try { this.vehicles = await fetchVehicles() } finally { this.vehicleLoading = false } }, async loadAssignments() { this.assignmentLoading = true try { this.assignments = await fetchAssignments() } finally { this.assignmentLoading = false } }, async submitRelease(payload) { await createRelease(payload) await this.loadReleases() }, async saveRelease(originalReleaseVersion, payload) { await updateRelease(originalReleaseVersion, payload) await this.loadReleases() }, async removeRelease(releaseVersion) { await deleteRelease(releaseVersion) await this.loadReleases() }, async submitVehicle(payload) { await registerVehicle(payload) await this.loadVehicles() }, async saveVehicle(originalVehicleId, payload) { await updateVehicle(originalVehicleId, payload) await this.loadVehicles() }, async removeVehicle(vehicleId) { await deleteVehicle(vehicleId) await this.loadVehicles() }, async submitAssignment(releaseVersion, vehicleIds) { await assignRelease(releaseVersion, vehicleIds) await this.loadAssignments() }, async saveAssignment(vehicleId, releaseVersion) { await updateAssignment(vehicleId, releaseVersion) await this.loadAssignments() }, async removeAssignment(vehicleId) { await deleteAssignment(vehicleId) await this.loadAssignments() }, getReleaseByVersion(releaseVersion) { return this.releases.find((item) => item.manifest.releaseVersion === releaseVersion) }, getVehicleById(vehicleId) { return this.vehicles.find((item) => item.vehicleId === vehicleId) }, getTaskByVehicleId(vehicleId) { return this.assignments.find((item) => item.vehicleId === vehicleId) } } })