import { supabase } from '@/integrations/supabase/client'; import type { Json } from '@/integrations/supabase/types'; import { uploadPendingImages } from './imageUploadHelper'; import { CompanyFormData, TempCompanyData } from '@/types/company'; export type { CompanyFormData, TempCompanyData }; export async function submitCompanyCreation( data: CompanyFormData, companyType: 'manufacturer' | 'designer' | 'operator' | 'property_owner', userId: string ) { // Upload any pending local images first let processedImages = data.images; if (data.images?.uploaded && data.images.uploaded.length > 0) { try { const uploadedImages = await uploadPendingImages(data.images.uploaded); processedImages = { ...data.images, uploaded: uploadedImages }; } catch (error) { console.error(`Failed to upload images for ${companyType} creation:`, error); throw new Error('Failed to upload images. Please check your connection and try again.'); } } // Create the main submission record const { data: submissionData, error: submissionError } = await supabase .from('content_submissions') .insert({ user_id: userId, submission_type: companyType, content: { action: 'create' }, status: 'pending' }) .select() .single(); if (submissionError) throw submissionError; // Create the submission item with actual company data const { error: itemError } = await supabase .from('submission_items') .insert({ submission_id: submissionData.id, item_type: companyType, item_data: { name: data.name, slug: data.slug, description: data.description, person_type: data.person_type, website_url: data.website_url, founded_year: data.founded_year, headquarters_location: data.headquarters_location, company_type: companyType, images: processedImages as unknown as Json }, status: 'pending', order_index: 0 }); if (itemError) throw itemError; return { submitted: true, submissionId: submissionData.id }; } export async function submitCompanyUpdate( companyId: string, data: CompanyFormData, userId: string ) { // Fetch existing company data (all fields for original_data) const { data: existingCompany, error: fetchError } = await supabase .from('companies') .select('*') .eq('id', companyId) .single(); if (fetchError) throw fetchError; if (!existingCompany) throw new Error('Company not found'); // Upload any pending local images first let processedImages = data.images; if (data.images?.uploaded && data.images.uploaded.length > 0) { try { const uploadedImages = await uploadPendingImages(data.images.uploaded); processedImages = { ...data.images, uploaded: uploadedImages }; } catch (error) { console.error(`Failed to upload images for ${existingCompany.company_type} update:`, error); throw new Error('Failed to upload images. Please check your connection and try again.'); } } // Create the main submission record const { data: submissionData, error: submissionError } = await supabase .from('content_submissions') .insert({ user_id: userId, submission_type: existingCompany.company_type, content: { action: 'edit', company_id: companyId }, status: 'pending' }) .select() .single(); if (submissionError) throw submissionError; // Create the submission item with actual company data AND original data const { error: itemError } = await supabase .from('submission_items') .insert({ submission_id: submissionData.id, item_type: existingCompany.company_type, item_data: { company_id: companyId, name: data.name, slug: data.slug, description: data.description, person_type: data.person_type, website_url: data.website_url, founded_year: data.founded_year, headquarters_location: data.headquarters_location, images: processedImages as unknown as Json }, original_data: JSON.parse(JSON.stringify(existingCompany)), status: 'pending', order_index: 0 }); if (itemError) throw itemError; return { submitted: true, submissionId: submissionData.id }; }