import { apiClient } from './client'; import { Product, CreateProductData, UpdateProductData, ApiResponse } from '@/types/product'; export const productsApi = { // Get all products for a package getProducts: async (packageName: string, token: string): Promise => { return apiClient.get(`/package-names/${packageName}/products`, token); }, // Get single product getProduct: async (packageName: string, productId: number, token: string): Promise => { return apiClient.get(`/package-names/${packageName}/products/${productId}`, token); }, // Create new product createProduct: async (packageName: string, data: CreateProductData, token: string): Promise> => { const formData = new FormData(); // Append all fields to FormData Object.entries(data).forEach(([key, value]) => { if (value !== null && value !== undefined) { if (key === 'descriptions' && Array.isArray(value)) { // Handle descriptions array value.forEach((desc, index) => { formData.append(`descriptions[${index}]`, desc); }); } else if (typeof value === 'boolean') { // Laravel's boolean rule accepts "1"/"0", not "true"/"false" formData.append(key, value ? '1' : '0'); } else { formData.append(key, String(value)); } } }); return apiClient.post>(`/package-names/${packageName}/products`, formData, token); }, // Update product (using PATCH) updateProduct: async (packageName: string, productId: number, data: UpdateProductData, token: string): Promise> => { return apiClient.patch>( `/package-names/${packageName}/products/${productId}`, data, token ); }, // Delete product deleteProduct: async (packageName: string, productId: number, token: string): Promise> => { return apiClient.delete>(`/package-names/${packageName}/products/${productId}`, undefined, token); }, // Alternative update method using POST with _method spoofing (if PATCH is not supported) updateProductWithSpoof: async (packageName: string, productId: number, data: UpdateProductData, token: string): Promise> => { const formData = new FormData(); formData.append('_method', 'PATCH'); Object.entries(data).forEach(([key, value]) => { if (value !== null && value !== undefined) { if (key === 'descriptions' && Array.isArray(value)) { value.forEach((desc, index) => { formData.append(`descriptions[${index}]`, desc); }); } else if (typeof value === 'boolean') { // Laravel's boolean rule accepts "1"/"0", not "true"/"false" formData.append(key, value ? '1' : '0'); } else { formData.append(key, String(value)); } } }); return apiClient.post>(`/package-names/${packageName}/products/${productId}`, formData, token); } };