document.addEventListener('DOMContentLoaded', () => {

    /* --- THEME TOGGLE LOGIC --- */
    const root = document.documentElement;
    const themeToggleBtn = document.getElementById('themeToggleBtn');
    const themeSwitchCore = document.getElementById('themeSwitchCore');
    
    const savedTheme = localStorage.getItem('theme') || 'dark';
    setTheme(savedTheme);

    themeToggleBtn.addEventListener('click', () => {
        const currentTheme = root.getAttribute('data-theme');
        const newTheme = currentTheme === 'light' ? 'dark' : 'light';
        setTheme(newTheme);
        localStorage.setItem('theme', newTheme);
    });

    function setTheme(theme) {
        root.setAttribute('data-theme', theme);
        if(theme === 'light') {
            themeSwitchCore.classList.add('light');
        } else {
            themeSwitchCore.classList.remove('light');
        }
    }

    /* Scroll Behavior for Theme Toggle */
    let lastScrollTop = 0;
    window.addEventListener('scroll', () => {
        const currentScroll = window.pageYOffset || document.documentElement.scrollTop;
        if (currentScroll < lastScrollTop || currentScroll < 50) {
            themeToggleBtn.classList.remove('hidden');
        } else if (currentScroll > lastScrollTop && currentScroll > 50) {
            themeToggleBtn.classList.add('hidden');
        }
        lastScrollTop = currentScroll <= 0 ? 0 : currentScroll;
    }, { passive: true });


    /* --- CHATBOT LOGIC --- */
    const chatTrigger = document.getElementById('chatTrigger');
    const chatContainer = document.getElementById('chatContainer');
    const closeChatBtn = document.getElementById('closeChatBtn');
    const userInput = document.getElementById('userInput');
    const sendBtn = document.getElementById('sendBtn');
    const chatMessages = document.getElementById('chatMessages');
    const chatNotif = document.getElementById('chatNotif');
    let conversationContext = '';

    // Toggle Chat visibility
    function toggleChat() {
        if (chatContainer.style.display === 'none' || chatContainer.style.display === '') {
            chatContainer.style.display = 'flex';
            chatTrigger.style.transform = 'scale(1.1)';
            chatNotif.style.display = 'none';
            setTimeout(() => userInput.focus(), 300);
        } else {
            chatContainer.style.display = 'none';
            chatTrigger.style.transform = 'scale(1)';
        }
    }

    chatTrigger.addEventListener('click', toggleChat);
    closeChatBtn.addEventListener('click', toggleChat);

    // Close when clicking outside
    document.addEventListener('click', (event) => {
        if (chatContainer.style.display === 'flex' && 
            !chatContainer.contains(event.target) && 
            !chatTrigger.contains(event.target)) {
            toggleChat();
        }
    });

    // Notify after 30 seconds
    setTimeout(() => {
        if (chatContainer.style.display !== 'flex') {
            chatNotif.style.display = 'block';
        }
    }, 30000);

    // Messaging Logic
    sendBtn.addEventListener('click', handleSend);
    userInput.addEventListener('keypress', (e) => {
        if (e.key === 'Enter') handleSend();
    });

    function handleSend() {
        const message = userInput.value.trim();
        if (message === '') return;

        addMessage(message, 'user');
        userInput.value = '';

        const typingIndicator = document.createElement('div');
        typingIndicator.className = 'typing-indicator';
        typingIndicator.innerHTML = '<div class="typing-dot"></div><div class="typing-dot"></div><div class="typing-dot"></div>';
        chatMessages.appendChild(typingIndicator);
        chatMessages.scrollTop = chatMessages.scrollHeight;

        setTimeout(() => {
            typingIndicator.remove();
            const botResponse = generateResponse(message);
            addMessage(botResponse, 'bot');
        }, Math.random() * 1000 + 1000);
    }

    function addMessage(text, sender) {
        const messageDiv = document.createElement('div');
        messageDiv.className = `message ${sender}-message`;
        messageDiv.textContent = text;
        chatMessages.appendChild(messageDiv);
        chatMessages.scrollTop = chatMessages.scrollHeight;
    }

    function generateResponse(message) {
        const lowercaseMessage = message.toLowerCase();
        
        const responses = {
            'hi': 'Hello! Welcome to Babin\'s portfolio! How can I assist you today?',
            'hello': 'Hi! Great to see you here. How can I help?',
            'who': 'Babin Timsina is a talented web developer and designer who specializes in creating modern, user-friendly digital experiences.',
            'skills': 'Babin\'s core skills include HTML, CSS, JavaScript, React, Node.js, and UI/UX Design.',
            'project': 'Babin works on various dynamic web applications, responsive portfolio sites, and e-commerce solutions.',
            'contact': 'You can reach Babin at babintimsina@gmail.com or connect via LinkedIn.',
            'bye': 'Goodbye! Thanks for chatting. Feel free to return if you have more questions!'
        };

        for (const [key, response] of Object.entries(responses)) {
            if (lowercaseMessage.includes(key)) {
                return response;
            }
        }

        const fallbacks = [
            "I'm here to help! Would you like to know about Babin's skills, projects, or how to get in touch?",
            "I can tell you about Babin's experience, technical skills, or help you connect with him. What interests you?"
        ];
        return fallbacks[Math.floor(Math.random() * fallbacks.length)];
    }
});
