File size: 6,219 Bytes
3ec3239
 
6b9ac3a
 
 
 
 
 
 
 
 
 
 
 
 
3ec3239
 
 
 
 
 
 
 
 
 
 
 
6b9ac3a
 
3ec3239
 
f215f7a
6b9ac3a
 
3ec3239
f215f7a
 
3ec3239
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6b9ac3a
 
3ec3239
 
6b9ac3a
3ec3239
 
 
 
 
6b9ac3a
 
3ec3239
 
 
 
 
 
 
 
 
 
 
6b9ac3a
 
3ec3239
 
 
 
 
 
 
f57d350
 
 
 
 
 
 
 
 
3ec3239
 
 
 
 
 
 
 
 
f57d350
 
 
 
 
3ec3239
 
 
 
 
f57d350
3ec3239
 
f57d350
 
 
 
 
 
 
 
3ec3239
 
 
 
f57d350
3ec3239
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155

document.addEventListener('DOMContentLoaded', function() {
    // Encryption functions
    const secretKey = 'chatty-secret-key'; // In production, use a secure key management system
    const encryptMessage = (message) => {
        return btoa(unescape(encodeURIComponent(message))); // Simple base64 encoding for demo
    };
    const decryptMessage = (message) => {
        try {
            return decodeURIComponent(escape(atob(message)));
        } catch {
            return message; // Fallback if decryption fails (e.g., old unencrypted messages)
        }
    };

    // Initialize message storage
    const messageStorage = JSON.parse(localStorage.getItem('chatMessages')) || [];
    
    // Load saved messages
    function loadMessages() {
        const messagesContainer = document.getElementById('messages');
        messagesContainer.querySelector('.space-y-4').innerHTML = '';
        
        messageStorage.forEach(msg => {
            const messageDiv = document.createElement('div');
            messageDiv.className = `flex items-start ${msg.isOutgoing ? 'justify-end' : ''} message`;
            
            const decryptedContent = decryptMessage(msg.content);
            
            if (msg.isOutgoing) {
                messageDiv.innerHTML = `
                <div class="max-w-xs lg:max-w-md bg-gray-900 text-white rounded-lg p-3">
<p>${decryptedContent}</p>
<p class="text-xs text-indigo-200 mt-1">${msg.timestamp}</p>
                    </div>
                <div class="w-8 h-8 rounded-full bg-gray-900 flex items-center justify-center text-white text-xs ml-2">
ME
                    </div>
                `;
            } else {
                messageDiv.innerHTML = `
                    <div class="w-8 h-8 rounded-full bg-gray-300 flex items-center justify-center text-gray-600 text-xs mr-2">
                        JD
                    </div>
                    <div class="max-w-xs lg:max-w-md bg-gray-200 rounded-lg p-3">
                        <p>${msg.content}</p>
                        <p class="text-xs text-gray-500 mt-1">${msg.timestamp}</p>
                    </div>
                `;
            }
            
            messagesContainer.querySelector('.space-y-4').appendChild(messageDiv);
        });
        
        messagesContainer.scrollTop = messagesContainer.scrollHeight;
    }

    // Load any existing messages
    loadMessages();

    // Function to add a new message
    function addMessage(content, isOutgoing = true) {
        const messagesContainer = document.getElementById('messages');
        const messageDiv = document.createElement('div');
        messageDiv.className = `flex items-start ${isOutgoing ? 'justify-end' : ''} message`;
        
        const timestamp = new Date().toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});
        
        // Save message to storage
            messageStorage.push({
            content: encryptMessage(content),
            isOutgoing,
            timestamp
});
        localStorage.setItem('chatMessages', JSON.stringify(messageStorage));
        
        if (isOutgoing) {
            messageDiv.innerHTML = `
                <div class="max-w-xs lg:max-w-md bg-indigo-500 text-white rounded-lg p-3">
                    <p>${decryptedContent}</p>
<p class="text-xs text-indigo-200 mt-1">${timestamp}</p>
                </div>
                <div class="w-8 h-8 rounded-full bg-indigo-500 flex items-center justify-center text-white text-xs ml-2">
                    ME
                </div>
            `;
        } else {
            messageDiv.innerHTML = `
                <div class="w-8 h-8 rounded-full bg-gray-300 flex items-center justify-center text-gray-600 text-xs mr-2">
                    JD
                </div>
                <div class="max-w-xs lg:max-w-md bg-gray-200 rounded-lg p-3">
                    <p>${decryptedContent}</p>
<p class="text-xs text-gray-500 mt-1">${timestamp}</p>
                </div>
            `;
        }
        
        messagesContainer.querySelector('.space-y-4').appendChild(messageDiv);
        messagesContainer.scrollTop = messagesContainer.scrollHeight;
    }
    // Message form handling
    const messageForm = document.getElementById('messageForm');
    const messageInput = document.getElementById('messageInput');

    function handleMessageSubmit(e) {
        e.preventDefault();
        if (messageInput.value.trim() !== '') {
            addMessage(messageInput.value.trim());
            messageInput.value = '';
            
            // Simulate reply after 1-3 seconds
            setTimeout(() => {
                const replies = [
                    "That's interesting!",
                    "Tell me more about that.",
                    "I see what you mean.",
                    "Sounds good to me!",
                    "What else is new?",
                    "I agree with you.",
                    "Thanks for the update!",
                    "Let's discuss this later.",
                    "Interesting perspective!",
                    "What do you think about...?"
                ];
                const randomReply = replies[Math.floor(Math.random() * replies.length)];
                addMessage(randomReply, false);
            }, 1000 + Math.random() * 2000);
        }
        messageInput.focus();
    }

    // Form submission
    messageForm.addEventListener('submit', handleMessageSubmit);
    
    // Keyboard shortcuts
    messageInput.addEventListener('keydown', function(e) {
        if (e.key === 'Enter' && !e.shiftKey) {
            e.preventDefault();
            messageForm.dispatchEvent(new Event('submit'));
        }
    });

    // Clear chat button
const clearButton = document.createElement('button');
    clearButton.className = 'ml-2 bg-red-500 text-white p-2 rounded-full hover:bg-red-600';
    clearButton.innerHTML = '<i data-feather="trash-2"></i>';
    clearButton.addEventListener('click', function() {
        localStorage.removeItem('chatMessages');
        messageStorage.length = 0;
        loadMessages();
    });
    document.querySelector('.border-t.border-gray-200.p-4 .flex').appendChild(clearButton);
    feather.replace();
});