import { useState } from 'react'; import { Form, Input, Button, Select, message, Space, Divider } from 'antd'; import { PhoneOutlined, SafetyOutlined, QrcodeOutlined, MailOutlined, CopyOutlined } from '@ant-design/icons'; const API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:8200'; const { Option } = Select; interface Props { formData: any; updateFormData: (data: any) => void; onPrev: () => void; onSubmit: () => void; isPhoneVerified: boolean; setIsPhoneVerified: (verified: boolean) => void; addDebugEvent?: (type: string, status: string, message: string, data?: any) => void; } export default function Step3Payment({ formData, updateFormData, onPrev, onSubmit, isPhoneVerified, setIsPhoneVerified, addDebugEvent }: Props) { const [form] = Form.useForm(); const [codeSent, setCodeSent] = useState(false); const [loading, setLoading] = useState(false); const [verifyLoading, setVerifyLoading] = useState(false); const [submitting, setSubmitting] = useState(false); const [debugCode, setDebugCode] = useState(formData.smsDebugCode ?? null); const sendCode = async () => { try { const phone = form.getFieldValue('phone'); if (!phone) { message.error('Введите номер телефона'); return; } setLoading(true); addDebugEvent?.('sms', 'pending', `📱 Отправляю SMS на ${phone}...`, { phone }); const response = await fetch(`${API_BASE_URL}/api/v1/sms/send`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ phone }), }); const result = await response.json(); if (response.ok) { addDebugEvent?.('sms', 'success', `✅ SMS отправлен (DEBUG mode)`, { phone, debug_code: result.debug_code, message: result.message }); message.success('Код отправлен на ваш телефон'); setCodeSent(true); if (result.debug_code) { setDebugCode(result.debug_code); updateFormData({ smsDebugCode: result.debug_code }); message.info(`DEBUG: Код ${result.debug_code}`); } } else { addDebugEvent?.('sms', 'error', `❌ Ошибка SMS: ${result.detail}`, { error: result.detail }); message.error(result.detail || 'Ошибка отправки кода'); } } catch (error) { message.error('Ошибка соединения с сервером'); } finally { setLoading(false); } }; const verifyCode = async () => { try { const phone = form.getFieldValue('phone'); const code = form.getFieldValue('smsCode'); if (!code) { message.error('Введите код из SMS'); return; } setVerifyLoading(true); addDebugEvent?.('sms', 'pending', `🔐 Проверяю SMS код...`, { phone, code }); const response = await fetch(`${API_BASE_URL}/api/v1/sms/verify`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ phone, code }), }); const result = await response.json(); if (response.ok) { addDebugEvent?.('sms', 'success', `✅ Телефон подтвержден успешно`, { phone, verified: true }); message.success('Телефон подтвержден!'); setDebugCode(null); updateFormData({ smsDebugCode: undefined }); setIsPhoneVerified(true); } else { addDebugEvent?.('sms', 'error', `❌ Неверный код SMS`, { phone, code, error: result.detail }); message.error(result.detail || 'Неверный код'); } } catch (error) { message.error('Ошибка соединения с сервером'); } finally { setVerifyLoading(false); } }; const handleSubmit = async () => { try { const values = await form.validateFields(); updateFormData(values); setSubmitting(true); await onSubmit(); } catch (error) { message.error('Заполните все обязательные поля'); } finally { setSubmitting(false); } }; return (
{/* Скрытые технические поля */} {/* Кнопка Назад вверху */}
{/* Блок верификации телефона */}

📱 Подтверждение телефона

} placeholder="+79001234567" disabled={isPhoneVerified} maxLength={12} size="large" /> } placeholder="example@mail.ru" size="large" type="email" disabled={isPhoneVerified} /> {!isPhoneVerified && ( <> {codeSent && ( } placeholder="123456" maxLength={6} style={{ width: '70%' }} size="large" /> )} {debugCode && !isPhoneVerified && (
DEBUG код: {debugCode}
)} )} {isPhoneVerified && (
✅ Телефон подтвержден
)}
{/* Блок выплаты (показывается только после верификации) */} {isPhoneVerified && ( <>

💳 Способ получения выплаты

СБП (Система быстрых платежей)

Выплата поступит на ваш счет в течение нескольких минут

{/* 🔧 Технические кнопки для разработки */}
🔧 DEV MODE - Быстрая навигация (без валидации)
)} ); }