import { useState, useRef } from 'react' import { X, Image as ImageIcon, Tag, AtSign } from 'lucide-react' import { createPost, searchUsers } from '../utils/api' import { hapticFeedback } from '../utils/telegram' import './CreatePostModal.css' const TAGS = [ { value: 'furry', label: 'Furry', color: '#FF8A33' }, { value: 'anime', label: 'Anime', color: '#4A90E2' }, { value: 'other', label: 'Other', color: '#A0A0A0' } ] export default function CreatePostModal({ user, onClose, onPostCreated }) { const [content, setContent] = useState('') const [selectedTags, setSelectedTags] = useState([]) const [image, setImage] = useState(null) const [imagePreview, setImagePreview] = useState(null) const [isNSFW, setIsNSFW] = useState(false) const [loading, setLoading] = useState(false) const [showUserSearch, setShowUserSearch] = useState(false) const [userSearchQuery, setUserSearchQuery] = useState('') const [searchResults, setSearchResults] = useState([]) const [mentionedUsers, setMentionedUsers] = useState([]) const fileInputRef = useRef(null) const handleImageSelect = (e) => { const file = e.target.files[0] if (file) { setImage(file) const reader = new FileReader() reader.onloadend = () => { setImagePreview(reader.result) } reader.readAsDataURL(file) hapticFeedback('light') } } const handleRemoveImage = () => { setImage(null) setImagePreview(null) if (fileInputRef.current) { fileInputRef.current.value = '' } } const toggleTag = (tag) => { hapticFeedback('light') if (selectedTags.includes(tag)) { setSelectedTags(selectedTags.filter(t => t !== tag)) } else { setSelectedTags([...selectedTags, tag]) } } const handleUserSearch = async (query) => { setUserSearchQuery(query) if (query.length > 1) { try { const users = await searchUsers(query) setSearchResults(users) } catch (error) { console.error('Ошибка поиска:', error) } } else { setSearchResults([]) } } const handleMentionUser = (user) => { if (!mentionedUsers.find(u => u._id === user._id)) { setMentionedUsers([...mentionedUsers, user]) setContent(prev => prev + `@${user.username} `) } setShowUserSearch(false) setUserSearchQuery('') setSearchResults([]) hapticFeedback('light') } const handleSubmit = async () => { if (selectedTags.length === 0) { alert('Выберите хотя бы один тег') return } if (!content.trim() && !image) { alert('Добавьте текст или изображение') return } try { setLoading(true) hapticFeedback('light') const formData = new FormData() formData.append('content', content) formData.append('tags', JSON.stringify(selectedTags)) formData.append('isNSFW', isNSFW) if (image) { formData.append('image', image) } if (mentionedUsers.length > 0) { formData.append('mentionedUsers', JSON.stringify(mentionedUsers.map(u => u._id))) } const newPost = await createPost(formData) hapticFeedback('success') onPostCreated(newPost) } catch (error) { console.error('Ошибка создания поста:', error) hapticFeedback('error') alert('Ошибка создания поста') } finally { setLoading(false) } } return (