import React, { useState, useMemo } from 'react'; 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 { api, selectedAccount } = 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 (!api || !selectedAccount || !inviteeAddress) { setInitiateError('Please enter a valid address'); return; } setInitiating(true); setInitiateError(null); setInitiateSuccess(false); try { const { web3FromAddress } = await import('@pezkuwi/extension-dapp'); const injector = await web3FromAddress(selectedAccount.address); if (import.meta.env.DEV) console.log(`Initiating referral from ${selectedAccount.address} to ${inviteeAddress}...`); const tx = api.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 = api.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.message || 'Failed to initiate referral'); setInitiating(false); } }; return ( Invite Friends to PezkuwiChain Share your referral link. When your friends complete KYC, you'll earn trust score points!
{/* Referral Link Display */}

Anyone who signs up with this link will be counted as your referral

{/* Manual Referral Initiation */}

If you know your friend's wallet address, you can pre-register them on-chain. They must then complete KYC to finalize the referral.

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

Referral initiated successfully!

)} {initiateError && (

{initiateError}

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

Referral Rewards

  • • 1-10 referrals: 10 points each (up to 100 points)
  • • 11-50 referrals: 5 points each (up to 300 points)
  • • 51-100 referrals: 4 points each (up to 500 points)
  • • Maximum: 500 trust score points
{/* Close Button */}
); };