import React, { useState, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { usePezkuwi } from '@/contexts/PezkuwiContext'; import { Copy, Check, Share2, Mail, MessageCircle, Twitter, Facebook, Linkedin } from 'lucide-react'; interface InviteUserModalProps { isOpen: boolean; onClose: () => void; } export const InviteUserModal: React.FC = ({ isOpen, onClose }) => { const { t } = useTranslation(); const { peopleApi, isPeopleReady, selectedAccount, walletSource } = usePezkuwi(); const [copied, setCopied] = useState(false); const [inviteeAddress, setInviteeAddress] = useState(''); const [initiating, setInitiating] = useState(false); const [initiateSuccess, setInitiateSuccess] = useState(false); const [initiateError, setInitiateError] = useState(null); // Generate referral link with user's address const referralLink = useMemo(() => { if (!selectedAccount?.address) return ''; const baseUrl = window.location.origin; return `${baseUrl}/be-citizen?ref=${selectedAccount.address}`; }, [selectedAccount?.address]); // Share text for social media const shareText = useMemo(() => { return `Join me on Digital Kurdistan (PezkuwiChain)! 🏛️\n\nBecome a citizen and get your Welati Tiki NFT.\n\nUse my referral link:\n${referralLink}`; }, [referralLink]); const handleCopy = async () => { try { await navigator.clipboard.writeText(referralLink); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (error) { if (import.meta.env.DEV) console.error('Failed to copy:', error); } }; const handleShare = (platform: string) => { const encodedText = encodeURIComponent(shareText); const encodedUrl = encodeURIComponent(referralLink); const urls: Record = { whatsapp: `https://wa.me/?text=${encodedText}`, telegram: `https://t.me/share/url?url=${encodedUrl}&text=${encodeURIComponent('Join me on Digital Kurdistan! 🏛️')}`, twitter: `https://twitter.com/intent/tweet?text=${encodedText}`, facebook: `https://www.facebook.com/sharer/sharer.php?u=${encodedUrl}`, linkedin: `https://www.linkedin.com/sharing/share-offsite/?url=${encodedUrl}`, email: `mailto:?subject=${encodeURIComponent('Join Digital Kurdistan')}&body=${encodedText}`, }; if (urls[platform]) { window.open(urls[platform], '_blank', 'width=600,height=400'); } }; const handleInitiateReferral = async () => { if (!peopleApi || !isPeopleReady || !selectedAccount || !inviteeAddress) { setInitiateError('Please connect wallet and enter a valid address'); return; } setInitiating(true); setInitiateError(null); setInitiateSuccess(false); try { const { getSigner } = await import('@/lib/get-signer'); const injector = await getSigner(selectedAccount.address, walletSource, peopleApi); if (import.meta.env.DEV) console.log(`Initiating referral from ${selectedAccount.address} to ${inviteeAddress}...`); // referral pallet is on People Chain const tx = peopleApi.tx.referral.initiateReferral(inviteeAddress); await tx.signAndSend(selectedAccount.address, { signer: injector.signer }, ({ status, dispatchError }) => { if (dispatchError) { let errorMessage = 'Transaction failed'; if (dispatchError.isModule) { const decoded = peopleApi.registry.findMetaError(dispatchError.asModule); errorMessage = `${decoded.section}.${decoded.name}: ${decoded.docs.join(' ')}`; } else { errorMessage = dispatchError.toString(); } if (import.meta.env.DEV) console.error(errorMessage); setInitiateError(errorMessage); setInitiating(false); return; } if (status.isInBlock || status.isFinalized) { if (import.meta.env.DEV) console.log('Referral initiated successfully!'); setInitiateSuccess(true); setInitiating(false); setInviteeAddress(''); } }); } catch (err: unknown) { if (import.meta.env.DEV) console.error('Failed to initiate referral:', err); setInitiateError(err instanceof Error ? err.message : 'Failed to initiate referral'); setInitiating(false); } }; return ( {t('invite.title')} {t('invite.subtitle')}
{/* Referral Link Display */}

{t('invite.linkDesc')}

{/* Manual Referral Initiation */}

{t('invite.preRegisterDesc')}

setInviteeAddress(e.target.value)} placeholder={t('invite.friendAddress')} className="bg-gray-800 border-gray-700 text-white font-mono text-sm placeholder:text-gray-500 placeholder:opacity-50" />
{initiateSuccess && (

{t('invite.initiated')}

)} {initiateError && (

{initiateError}

)}
{/* Share Options */}
{/* WhatsApp */} {/* Telegram */} {/* Twitter */} {/* Facebook */} {/* LinkedIn */} {/* Email */}
{/* Rewards Info */}

{t('invite.rewards')}

  • • {t('invite.reward1')}
  • • {t('invite.reward2')}
  • • {t('invite.reward3')}
  • • {t('invite.maxReward')}
{/* Close Button */}
); };