/** * BoostMedia AI Content Generator Admin - Regenerate Image Dialog * * @package BoostMedia_AI * @license GPL-2.0-or-later */ import { useState, useEffect } from 'react' import { X, ImageIcon, RefreshCw } from 'lucide-react' import { Button } from '../common' import { endpoints } from '../../api/client' import { t } from '../../lib/i18n' interface RegenerateImageDialogProps { postId: number postTitle: string currentImageUrl?: string isOpen: boolean onClose: () => void onSuccess: (newImageUrl: string, thumbnailUrl: string) => void } export function RegenerateImageDialog({ postId, postTitle, currentImageUrl, isOpen, onClose, onSuccess, }: RegenerateImageDialogProps) { const [notes, setNotes] = useState('') const [loading, setLoading] = useState(false) const [error, setError] = useState('') const [balance, setBalance] = useState(null) useEffect(() => { if (isOpen) { setError('') setBalance(null) endpoints.getCreditsStatus() .then((res: any) => { const d = res.data ?? res const total = (d.credits?.free?.remaining || 0) + (d.boost_credits?.remaining || 0) + (d.credits?.subscription?.remaining || 0) setBalance(total) }) .catch(() => setBalance(null)) } }, [isOpen]) if (!isOpen) return null const handleRegenerate = async () => { setLoading(true) setError('') try { const response = await endpoints.regenerateImage(postId, notes || undefined) const data = response.data onSuccess(data.image_url, data.thumbnail_url) setNotes('') onClose() } catch (err: any) { const msg = err?.message || err?.error?.message if (msg?.includes('INSUFFICIENT_CREDITS') || msg?.includes('Insufficient credits')) { setError(t('Insufficient credits for image generation. Visit the Usage page to purchase more.')) } else { setError(t('Failed to generate image. Please try again.')) } } finally { setLoading(false) } } const handleBackdropClick = (e: React.MouseEvent) => { if (e.target === e.currentTarget && !loading) { onClose() } } return (
{/* Header */}

{currentImageUrl ? t('Regenerate Image') : t('Generate Image')}

{/* Body */}
{/* Current image preview */} {currentImageUrl && (
{postTitle}
)} {/* Notes textarea */}