import { useEffect, useState } from 'react' import { Link, List, Grid, MapPin, Check } from 'lucide-react' import { journeyApi } from '../../api/client' import { useTranslation } from '../../i18n' import { useToast } from '../shared/Toast' export default function JourneyShareSection({ journeyId }: { journeyId: number }) { const { t } = useTranslation() const [link, setLink] = useState<{ token: string; share_timeline: boolean; share_gallery: boolean; share_map: boolean } | null>(null) const [loading, setLoading] = useState(true) const [copied, setCopied] = useState(false) const toast = useToast() useEffect(() => { journeyApi.getShareLink(journeyId).then(d => setLink(d.link || null)).catch(() => {}).finally(() => setLoading(false)) }, [journeyId]) const createLink = async () => { try { const res = await journeyApi.createShareLink(journeyId, { share_timeline: true, share_gallery: true, share_map: true }) setLink({ token: res.token, share_timeline: true, share_gallery: true, share_map: true }) toast.success(t('journey.share.linkCreated')) } catch { toast.error(t('journey.share.createFailed')) } } const togglePerm = async (key: 'share_timeline' | 'share_gallery' | 'share_map') => { if (!link) return const updated = { ...link, [key]: !link[key] } setLink(updated) try { await journeyApi.createShareLink(journeyId, { share_timeline: updated.share_timeline, share_gallery: updated.share_gallery, share_map: updated.share_map }) } catch { setLink(link); toast.error(t('journey.share.updateFailed')) } } const deleteLink = async () => { try { await journeyApi.deleteShareLink(journeyId) setLink(null) toast.success(t('journey.share.linkDeleted')) } catch { toast.error(t('journey.share.deleteFailed')) } } const shareUrl = link ? `${window.location.origin}/public/journey/${link.token}` : '' const copyLink = () => { navigator.clipboard.writeText(shareUrl) setCopied(true) setTimeout(() => setCopied(false), 2000) } if (loading) return null return (