import React, { useState, useEffect } from 'react'; import { Heart, Lock, Unlock, Key, Send, Copy, Check, Calendar, User } from 'lucide-react'; const LoveMessageSystem = () => { const [currentPartner, setCurrentPartner] = useState(null); const [partnershipId, setPartnershipId] = useState(null); const [messages, setMessages] = useState([]); const [newMessage, setNewMessage] = useState(''); const [unlockKey, setUnlockKey] = useState(''); const [inputUnlockKey, setInputUnlockKey] = useState(''); const [showSetup, setShowSetup] = useState(true); const [partnerName, setPartnerName] = useState(''); const [copied, setCopied] = useState(false); const [notification, setNotification] = useState(''); // Initialize or load partnership useEffect(() => { const savedPartnerId = localStorage.getItem('partnerId'); const savedPartnershipId = localStorage.getItem('partnershipId'); if (savedPartnerId && savedPartnershipId) { setCurrentPartner(parseInt(savedPartnerId)); setPartnershipId(savedPartnershipId); setShowSetup(false); loadMessages(savedPartnershipId); loadUnlockKey(savedPartnershipId, parseInt(savedPartnerId)); } }, []); const generateId = () => { return Math.random().toString(36).substr(2, 9); }; const generateUnlockKey = () => { return Math.random().toString(36).substr(2, 12).toUpperCase(); }; const createPartnership = async (partner) => { const newPartnershipId = generateId(); const newUnlockKey = generateUnlockKey(); setCurrentPartner(partner); setPartnershipId(newPartnershipId); setUnlockKey(newUnlockKey); localStorage.setItem('partnerId', partner.toString()); localStorage.setItem('partnershipId', newPartnershipId); // Store in memory (simulating Supabase) const partnership = { id: newPartnershipId, partner1_unlock_key: partner === 1 ? newUnlockKey : null, partner2_unlock_key: partner === 2 ? newUnlockKey : null, created_at: new Date().toISOString() }; localStorage.setItem(`partnership_${newPartnershipId}`, JSON.stringify(partnership)); setShowSetup(false); showNotification(`Welcome, Partner ${partner}! Share this ID with your partner: ${newPartnershipId}`); }; const joinPartnership = async (existingId, partner) => { const partnership = localStorage.getItem(`partnership_${existingId}`); if (partnership) { const newUnlockKey = generateUnlockKey(); const partnershipData = JSON.parse(partnership); if (partner === 1) { partnershipData.partner1_unlock_key = newUnlockKey; } else { partnershipData.partner2_unlock_key = newUnlockKey; } localStorage.setItem(`partnership_${existingId}`, JSON.stringify(partnershipData)); setCurrentPartner(partner); setPartnershipId(existingId); setUnlockKey(newUnlockKey); localStorage.setItem('partnerId', partner.toString()); localStorage.setItem('partnershipId', existingId); setShowSetup(false); loadMessages(existingId); showNotification(`Successfully joined partnership!`); } else { showNotification('Partnership ID not found!'); } }; const loadMessages = (pId) => { const stored = localStorage.getItem(`messages_${pId}`); if (stored) { setMessages(JSON.parse(stored)); } }; const loadUnlockKey = (pId, partner) => { const partnership = localStorage.getItem(`partnership_${pId}`); if (partnership) { const data = JSON.parse(partnership); const key = partner === 1 ? data.partner1_unlock_key : data.partner2_unlock_key; setUnlockKey(key || ''); } }; const saveMessages = (pId, msgs) => { localStorage.setItem(`messages_${pId}`, JSON.stringify(msgs)); }; const sendMessage = async () => { if (!newMessage.trim()) return; const message = { id: generateId(), partnership_id: partnershipId, sender: currentPartner, content: newMessage, sent_at: new Date().toISOString(), unlocked: false }; const updatedMessages = [...messages, message]; setMessages(updatedMessages); saveMessages(partnershipId, updatedMessages); setNewMessage(''); showNotification('Message sent! 💕'); }; const checkAutoUnlock = (sentDate) => { const sent = new Date(sentDate); const now = new Date(); const daysDiff = Math.floor((now - sent) / (1000 * 60 * 60 * 24)); return daysDiff >= 30; }; const useUnlockKey = () => { if (!inputUnlockKey.trim()) { showNotification('Please enter an unlock key'); return; } const partnership = localStorage.getItem(`partnership_${partnershipId}`); if (!partnership) return; const data = JSON.parse(partnership); const otherPartnerKey = currentPartner === 1 ? data.partner2_unlock_key : data.partner1_unlock_key; if (inputUnlockKey === otherPartnerKey) { // Unlock all messages const updatedMessages = messages.map(msg => ({ ...msg, unlocked: true })); setMessages(updatedMessages); saveMessages(partnershipId, updatedMessages); // Invalidate the used key and generate new one for other partner if (currentPartner === 1) { data.partner2_unlock_key = generateUnlockKey(); } else { data.partner1_unlock_key = generateUnlockKey(); } localStorage.setItem(`partnership_${partnershipId}`, JSON.stringify(data)); setInputUnlockKey(''); showNotification('Messages unlocked! 🎉'); } else { showNotification('Invalid unlock key!'); } }; const regenerateKey = () => { const newKey = generateUnlockKey(); setUnlockKey(newKey); const partnership = localStorage.getItem(`partnership_${partnershipId}`); if (partnership) { const data = JSON.parse(partnership); if (currentPartner === 1) { data.partner1_unlock_key = newKey; } else { data.partner2_unlock_key = newKey; } localStorage.setItem(`partnership_${partnershipId}`, JSON.stringify(data)); showNotification('New unlock key generated! 🔑'); } }; const copyToClipboard = (text) => { navigator.clipboard.writeText(text); setCopied(true); setTimeout(() => setCopied(false), 2000); }; const showNotification = (msg) => { setNotification(msg); setTimeout(() => setNotification(''), 3000); }; const myMessages = messages.filter(m => m.sender === currentPartner); const partnerMessages = messages.filter(m => m.sender !== currentPartner && m.sender !== null); if (showSetup) { return (

Love Messages

Connect with your partner

Create New Partnership

Join Existing

setPartnerName(e.target.value)} className="w-full px-4 py-3 border border-gray-300 rounded-xl mb-3 focus:ring-2 focus:ring-rose-500 focus:border-transparent" />
); } return (
{notification && (

{notification}

)}

Partner {currentPartner} Dashboard

Partnership ID: {partnershipId}

{/* Send Message Section */}

Send Love Message