import { useState } from 'react'; import { Flag, AlertTriangle } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Textarea } from '@/components/ui/textarea'; import { Label } from '@/components/ui/label'; import { supabase } from '@/integrations/supabase/client'; import { useAuth } from '@/hooks/useAuth'; import { useToast } from '@/hooks/use-toast'; import { getErrorMessage } from '@/lib/errorHandler'; interface ReportButtonProps { entityType: 'review' | 'profile' | 'content_submission'; entityId: string; className?: string; } const REPORT_TYPES = [ { value: 'spam', label: 'Spam' }, { value: 'inappropriate', label: 'Inappropriate Content' }, { value: 'harassment', label: 'Harassment' }, { value: 'fake_info', label: 'Fake Information' }, { value: 'offensive', label: 'Offensive Language' }, ]; export function ReportButton({ entityType, entityId, className }: ReportButtonProps) { const [open, setOpen] = useState(false); const [reportType, setReportType] = useState(''); const [reason, setReason] = useState(''); const [loading, setLoading] = useState(false); const { user } = useAuth(); const { toast } = useToast(); const handleSubmit = async () => { if (!user || !reportType) return; setLoading(true); try { const { error } = await supabase.from('reports').insert({ reporter_id: user.id, reported_entity_type: entityType, reported_entity_id: entityId, report_type: reportType, reason: reason.trim() || null, }); if (error) throw error; toast({ title: "Report Submitted", description: "Thank you for your report. We'll review it shortly.", }); setOpen(false); setReportType(''); setReason(''); } catch (error: unknown) { toast({ title: "Error", description: getErrorMessage(error), variant: "destructive", }); } finally { setLoading(false); } }; if (!user) return null; return ( Report Content Help us maintain a safe community by reporting inappropriate content.