import { client } from './client.js' const DEFAULT_FIELDS = [ 'id', 'status', 'title', 'slug', 'price', 'currency', 'condition', 'expires_at', 'date_created', 'user_created', 'images.directus_files_id.id', 'category.id', 'category.name', 'category.slug', 'category.icon', 'location.id', 'location.name', 'location.postal_code', 'location.country', 'location.latitude', 'location.longitude' ] const DETAIL_FIELDS = [ 'id', 'status', 'title', 'slug', 'description', 'price', 'currency', 'price_mode', 'price_type', 'condition', 'shipping', 'shipping_cost', 'expires_at', 'date_created', 'user_created', 'images.directus_files_id.id', 'category.id', 'category.name', 'category.slug', 'category.translations.*', 'location.id', 'location.name', 'location.postal_code', 'location.country', 'contact_public_key' ] export async function getListings(options = {}) { const params = { fields: options.fields || DEFAULT_FIELDS, filter: options.filter || { status: { _eq: 'published' }, _or: [ { expires_at: { _null: true } }, { expires_at: { _gt: '$NOW' } } ] }, sort: options.sort || ['-date_created'], limit: options.limit || 20, page: options.page || 1 } if (options.search) { params.search = options.search } const response = await client.get('/items/listings', params) return { items: response.data, meta: response.meta } } export async function getListing(id) { const response = await client.get(`/items/listings/${id}`, { fields: DETAIL_FIELDS }) return response.data } export async function createListing(data) { const response = await client.post('/items/listings', data) return response?.data || response } export async function updateListing(id, data) { const response = await client.patch(`/items/listings/${id}`, data) return response.data } export async function incrementListingViews(id) { try { const listing = await getListing(id) if (!listing) return null const newViews = (listing.views || 0) + 1 const response = await fetch(`${client.baseUrl}/items/listings/${id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ views: newViews }) }) if (!response.ok) return null return newViews } catch (e) { console.warn('Failed to increment views:', e) return null } } export async function deleteListing(id) { return client.delete(`/items/listings/${id}`) } export async function getMyListings() { const response = await client.get('/items/listings', { fields: ['*', 'images.directus_files_id.id', 'category.id', 'category.name', 'location.name'], filter: { user_created: { _eq: '$CURRENT_USER' } }, sort: ['-date_created'] }) return response.data || [] } export async function searchListings(query, options = {}) { return getListings({ search: query, ...options }) } export async function getListingsByCategory(categoryId, options = {}) { return getListings({ filter: { status: { _eq: 'published' }, category: { _eq: categoryId } }, ...options }) } export async function getListingsByLocation(locationId, options = {}) { return getListings({ filter: { status: { _eq: 'published' }, location: { _eq: locationId } }, ...options }) }