// lib/api.ts // Общая логика отправки данных калькулятора на backend import { API_BASE_URL } from './config'; export interface SubmitResponse { success: boolean; error?: string; } /** * Отправляет данные калькулятора на backend * @param calculatorType - Тип калькулятора (например, 'soap') * @param chatId - ID чата Telegram * @param formData - Данные формы * @param photoFile - Файл фото (опционально) * @returns Promise с результатом отправки */ export async function submitCalculator( calculatorType: string, chatId: string, formData: Record, photoFile: File | null = null ): Promise { const data = new FormData(); data.append('chat_id', chatId); // Добавляем все поля формы for (const [key, value] of Object.entries(formData)) { data.append(key, value.toString()); } // Добавляем фото, если есть if (photoFile) { data.append('photo', photoFile); } try { const res = await fetch(`${API_BASE_URL}/api/submit/${calculatorType}`, { method: 'POST', body: data, }); if (res.ok) { return { success: true }; } else { let errorMessage = `Ошибка ${res.status}: ${res.statusText}`; try { const errorData = await res.json(); errorMessage = errorData.error || errorMessage; } catch { try { errorMessage = await res.text(); } catch { // Оставляем дефолтное сообщение } } return { success: false, error: errorMessage, }; } } catch (err) { return { success: false, error: err instanceof Error ? err.message : 'Ошибка сети при отправке расчёта', }; } }