import type { SearchApiService } from "../../searchWidget/types"; import type { SearchProductsParams, SearchProductsResponse } from "../types"; import { useSearchStateManager } from "../../sharedState/composables/useSearchStateManager"; import { useBarneoConfig } from "../../../config/BarneoConfigManager"; export function useProductsApi(apiService: SearchApiService | undefined) { const { productsWidgetConfig } = useBarneoConfig(); const searchStateManager = useSearchStateManager(apiService, { productsWidget: productsWidgetConfig }); const searchProducts = async ( params: SearchProductsParams ): Promise => { if (!apiService || !params.query.trim()) { return null; } try { const response = await searchStateManager.performSearchWithFilters( params.query, { filters: params.filters, products: params.products, pagination: { limit_products: params.limit, limit_categories: 10, limit_brands: 10, offset_products: params.offset, }, sort: params.sort, updateSharedState: false, // Не обновляем sharedState при пагинации } ); if (response && response.data) { // Преобразуем FullProduct[] в Product[] const products = (response.data.full_products || []).map((p) => ({ id: p.id, name: p.name, description: p.description, price: p.price, image: p.picture || undefined, url: p.url || undefined, // Преобразуем null в undefined properties: p.properties, })); return { products, totalProducts: response.data.total_products || 0, pagination: { currentPage: Math.floor(params.offset / params.limit) + 1, totalPages: Math.ceil( (response.data.total_products || 0) / params.limit ), totalProducts: response.data.total_products || 0, itemsPerPage: params.limit, offset: params.offset, }, }; } return null; } catch (error) { console.error("Ошибка поиска товаров:", error); throw error; } }; return { searchProducts, }; }