import { useState, useEffect, useRef } from 'react'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { ChevronLeft, ChevronRight, Send, Facebook, Instagram, Heart, MessageCircle, Share2, Bookmark } from 'lucide-react'; import type { Media } from '@shared/schema'; interface PreviewModalProps { open: boolean; onOpenChange: (open: boolean) => void; postText: string; selectedMedia: string[]; mediaList: Media[]; onPublish: () => void; isPublishing: boolean; readOnly?: boolean; } type PreviewFormat = 'facebook-feed' | 'facebook-story' | 'instagram-feed' | 'instagram-story'; export function PreviewModal({ open, onOpenChange, postText, selectedMedia, mediaList, onPublish, isPublishing, readOnly = false }: PreviewModalProps) { const [previewFormat, setPreviewFormat] = useState('facebook-feed'); const [currentPhotoIndex, setCurrentPhotoIndex] = useState(0); const orderedMedia = selectedMedia .map(id => mediaList.find(m => m.id === id)) .filter((m): m is Media => m !== undefined); // Reset photo index when modal opens or media changes useEffect(() => { if (open) { setCurrentPhotoIndex(0); } }, [open, selectedMedia.length]); const nextPhoto = () => { setCurrentPhotoIndex((prev) => (prev + 1) % orderedMedia.length); }; const prevPhoto = () => { setCurrentPhotoIndex((prev) => (prev - 1 + orderedMedia.length) % orderedMedia.length); }; const goToPhoto = (index: number) => { setCurrentPhotoIndex(index); }; const getMediaUrl = (media: Media) => { if (previewFormat === 'facebook-feed') { return media.facebookFeedUrl || media.originalUrl; } else if (previewFormat === 'instagram-feed') { return media.instagramFeedUrl || media.originalUrl; } else { return media.instagramStoryUrl || media.originalUrl; } }; const renderMedia = (media: Media, className: string = "w-full h-auto") => { const url = getMediaUrl(media); if (media.type === 'video') { return (