import React, { useState, useRef, useEffect } from 'react'; import { Model } from '../types'; interface CreateModelModalProps { isOpen: boolean; onClose: () => void; onSave: (model: Model) => void; onDelete?: (id: string) => void; editingModel?: Model | null; } const CreateModelModal: React.FC = ({ isOpen, onClose, onSave, onDelete, editingModel }) => { const [name, setName] = useState(''); const [image, setImage] = useState(null); const [audio, setAudio] = useState(null); const [gender, setGender] = useState<'male' | 'female'>('male'); const imgInputRef = useRef(null); const audioInputRef = useRef(null); useEffect(() => { if (editingModel) { setName(editingModel.name); setImage(editingModel.image); setAudio(null); setGender(editingModel.targetGender || 'male'); } else { setName(''); setImage(null); setAudio(null); setGender('male'); } }, [editingModel, isOpen]); if (!isOpen) return null; const handleImageChange = (e: React.ChangeEvent) => { if (e.target.files && e.target.files[0]) setImage(e.target.files[0]); }; const handleAudioChange = (e: React.ChangeEvent) => { if (e.target.files && e.target.files[0]) setAudio(e.target.files[0]); }; const handleSave = () => { if (!name || !image || (!audio && !editingModel)) return; const model: Model = { id: editingModel?.id || `user_${Date.now()}`, name, image: image as any, refFile: audio || (editingModel?.refFile as any), category: 'user_custom', targetGender: gender, isCustom: true, type: 'standard' }; onSave(model); }; const getImgPreview = () => { if (!image) return null; if (typeof image === 'string') return image; return URL.createObjectURL(image as Blob); }; return (

{editingModel ? 'ویرایش مدل' : 'ساخت مدل صوتی جدید'}

مدل شخصی خود را با هوش مصنوعی آلفا بسازید

{/* Image Upload */}
imgInputRef.current?.click()} className="w-24 h-24 rounded-3xl border-2 border-dashed border-gray-200 overflow-hidden cursor-pointer hover:border-primary transition-all relative group" > {image ? ( ) : (
عکس
)}
{/* Name Input */}
setName(e.target.value)} placeholder="مثلا: صدای رادیویی من" className="w-full px-4 py-3 rounded-xl border border-gray-100 bg-gray-50 focus:bg-white focus:border-primary outline-none text-sm transition-all" />
{/* Audio Upload */}
audioInputRef.current?.click()} className={`p-4 rounded-xl border-2 border-dashed transition-all cursor-pointer flex flex-col gap-2 text-right ${audio ? 'border-green-400 bg-green-50' : 'border-gray-100 bg-gray-50 hover:border-primary'}`} >

{audio ? 'فایل صوتی انتخاب شد' : 'آپلود فایل صوتی مرجع'}

{audio ? audio.name : 'انتخاب فایل مدل...'}

{!audio && (

(بهترین حالت ۳ تا ۹ ثانیه)دقت کنید کیفیت صدای خروجی به کیفیت این فایل صوتی مدل که اضافه میکنید بستگی داره اگر فایل صوتی این مدل شما با کیفیت بالا بدون نویز باشه در حد استودیو خروجی های این مدل شما نیز با کیفیت خواهد بود

)}
{/* Gender Selection */}
{editingModel && onDelete && ( )}
); }; export default CreateModelModal;