import { defineStore } from 'pinia' import type { TourObject, SearchParams } from '~/types' interface SearchState { query: string results: TourObject[] total: number page: number totalPages: number loading: boolean filters: { category_id: number | null city: string rating_min: number | null sort_by: string } } export const useSearchStore = defineStore('search', { state: (): SearchState => ({ query: '', results: [], total: 0, page: 1, totalPages: 0, loading: false, filters: { category_id: null, city: '', rating_min: null, sort_by: 'rating_desc', }, }), actions: { setQuery(q: string) { this.query = q }, setFilter(key: K, value: SearchState['filters'][K]) { this.filters[key] = value }, resetFilters() { this.filters = { category_id: null, city: '', rating_min: null, sort_by: 'rating_desc', } }, async search(params?: Partial) { this.loading = true try { const api = useApi() const searchParams = new URLSearchParams() const q = params?.query || this.query if (q) searchParams.set('query', q) if (params?.category_id || this.filters.category_id) { searchParams.set('category_id', String(params?.category_id || this.filters.category_id)) } if (params?.city || this.filters.city) { searchParams.set('city', params?.city || this.filters.city) } if (params?.page) searchParams.set('page', String(params.page)) if (params?.per_page) searchParams.set('per_page', String(params.per_page)) if (params?.latitude) searchParams.set('latitude', String(params.latitude)) if (params?.longitude) searchParams.set('longitude', String(params.longitude)) if (params?.radius) searchParams.set('radius', String(params.radius)) if (this.filters.sort_by) { const [sort_by, sort_order] = this.filters.sort_by.split('_') searchParams.set('sort_by', sort_by) searchParams.set('sort_order', sort_order || 'desc') } const query = searchParams.toString() const endpoint = params?.latitude ? `/objects/nearby?${query}` : `/objects/search?${query}` const response = await api.get<{ items: TourObject[] total: number page: number total_pages: number }>(endpoint) this.results = response.items ?? [] this.total = response.total this.page = response.page this.totalPages = response.total_pages } finally { this.loading = false } }, }, })