<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>RAG Application</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
        }
        .container {
            display: flex;
            flex-direction: column;
            gap: 20px;
        }
        .query-section {
            display: none;
        }
        .response-section {
            margin-top: 20px;
            border-top: 1px solid #ccc;
            padding-top: 20px;
        }
        textarea {
            width: 100%;
            height: 100px;
        }
        button {
            padding: 10px 20px;
            background-color: #007bff;
            color: white;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }
        button:disabled {
            background-color: #ccc;
        }
        .context {
            background-color: #f8f9fa;
            padding: 10px;
            margin-top: 10px;
            border-radius: 4px;
        }
        .loading {
            opacity: 0.5;
            pointer-events: none;
        }
        
        .spinner {
            display: none;
            margin-left: 10px;
            color: #007bff;
        }
        
        .loading .spinner {
            display: inline;
        }

        /* Radio toggle styles */
        .toggle-radio {
            display: none;  /* Initially hidden */
            align-items: center;
            gap: 10px;
            margin: 10px 0;
        }

        .toggle-radio input[type="radio"] {
            margin-right: 5px;
        }

        .toggle-radio label {
            display: flex;
            align-items: center;
            margin-right: 15px;
            color: #666;
            cursor: pointer;
        }

        #contextSection {
            display: none;  /* Initially hidden */
        }

        /* Initially hide these sections */
        .query-section,
        .response-section,
        .toggle-radio,
        #contextSection {
            display: none;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>RAG Application</h1>
        
        <div class="upload-section">
            <h2>Upload Document</h2>
            <input type="file" id="fileInput" accept=".txt,.pdf">
            <button id="uploadButton" onclick="uploadFile()">Upload</button>
            <span id="uploadSpinner" class="spinner">Processing...</span>
        </div>

        <div id="querySection" class="query-section">
            <h2>Ask a Question</h2>
            <textarea id="queryInput" placeholder="Enter your question here..."></textarea>
            <button id="queryButton" onclick="submitQuery()">Submit Query</button>
            <span id="querySpinner" class="spinner">Processing...</span>
        </div>

        <div id="responseSection" class="response-section">
            <h2>Response</h2>
            <div id="answer"></div>
            
            <!-- Add radio toggle -->
            <div class="toggle-radio">
                <span>Context: </span>
                <label>
                    <input type="radio" name="contextToggle" value="show" onchange="toggleContext(this)"> Show
                </label>
                <label>
                    <input type="radio" name="contextToggle" value="hide" onchange="toggleContext(this)" checked> Hide
                </label>
            </div>
            
            <div id="contextSection">
                <h3>Context</h3>
                <div id="context"></div>
            </div>
        </div>
    </div>

    <script>
        let currentSessionId = null;

        function setLoading(isLoading, action) {
            const button = document.getElementById(action === 'upload' ? 'uploadButton' : 'queryButton');
            const spinner = document.getElementById(action === 'upload' ? 'uploadSpinner' : 'querySpinner');
            
            if (isLoading) {
                button.classList.add('loading');
                spinner.style.display = 'inline';
                button.disabled = true;
            } else {
                button.classList.remove('loading');
                spinner.style.display = 'none';
                button.disabled = false;
            }
        }

        async function uploadFile() {
            const fileInput = document.getElementById('fileInput');
            const file = fileInput.files[0];
            if (!file) {
                alert('Please select a file first');
                return;
            }

            setLoading(true, 'upload');

            // Hide all sections during upload and processing
            document.getElementById('querySection').style.display = 'none';
            document.getElementById('responseSection').style.display = 'none';
            document.getElementById('contextSection').style.display = 'none';
            document.querySelector('.toggle-radio').style.display = 'none';

            // Clear any previous content
            document.getElementById('answer').innerHTML = '';
            document.getElementById('context').innerHTML = '';
            document.getElementById('queryInput').value = '';

            const formData = new FormData();
            formData.append('file', file);

            try {
                const response = await fetch('/upload', {
                    method: 'POST',
                    body: formData
                });
                
                if (!response.ok) {
                    throw new Error(`HTTP error! status: ${response.status}`);
                }
                
                const data = await response.json();
                currentSessionId = data.session_id;
                
                // Only show query section after successful upload
                document.getElementById('querySection').style.display = 'block';
                
                alert('File uploaded successfully! You can now ask questions.');
            } catch (error) {
                console.error('Error:', error);
                alert('Error uploading file: ' + error.message);
            } finally {
                setLoading(false, 'upload');
            }
        }

        function toggleContext(radio) {
            const contextSection = document.getElementById('contextSection');
            contextSection.style.display = radio.value === 'show' ? 'block' : 'none';
        }

        async function submitQuery() {
            if (!currentSessionId) {
                alert('Please upload a document first');
                return;
            }

            const queryInput = document.getElementById('queryInput');
            const query = queryInput.value.trim();
            
            if (!query) {
                alert('Please enter a query');
                return;
            }

            setLoading(true, 'query');

            // Show response section but hide context initially
            document.getElementById('responseSection').style.display = 'block';
            document.getElementById('contextSection').style.display = 'none';
            document.querySelector('.toggle-radio').style.display = 'none';
            // Reset radio to "Hide"
            document.querySelector('input[value="hide"]').checked = true;

            try {
                const response = await fetch('/query', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify({
                        session_id: currentSessionId,
                        query: query
                    })
                });
                
                if (!response.ok) {
                    throw new Error(`HTTP error! status: ${response.status}`);
                }
                
                const data = await response.json();
                
                // Display response
                document.getElementById('answer').innerHTML = `<p><strong>Answer:</strong> ${data.answer}</p>`;
                
                // Handle context display with error checking
                if (data.context && Array.isArray(data.context)) {
                    const validContexts = data.context.filter(c => c != null && c !== '');
                    const contextHtml = validContexts.length > 0 
                        ? validContexts.join('<br><br>')
                        : 'No context available';
                    document.getElementById('context').innerHTML = `<div class="context">${contextHtml}</div>`;
                    
                    // Show the radio toggle only after we have a valid response with context
                    document.querySelector('.toggle-radio').style.display = 'flex';
                } else {
                    document.getElementById('context').innerHTML = `<div class="context">No context available</div>`;
                }
            } catch (error) {
                console.error('Error:', error);
                alert('Error submitting query: ' + error.message);
            } finally {
                setLoading(false, 'query');
            }
        }
    </script>
</body>
</html>