<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>WebRTC File Transfer</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      max-width: 800px;
      margin: 0 auto;
      padding: 20px;
    }
    h1 {
      color: #333;
    }
    .file-list {
      border: 1px solid #ddd;
      border-radius: 4px;
      margin-bottom: 20px;
      max-height: 300px;
      overflow-y: auto;
    }
    .file-item {
      padding: 10px;
      border-bottom: 1px solid #eee;
      cursor: pointer;
      display: flex;
      justify-content: space-between;
    }
    .file-item:hover {
      background-color: #f5f5f5;
    }
    .file-item:last-child {
      border-bottom: none;
    }
    .progress-container {
      margin: 20px 0;
      display: none;
    }
    .progress-bar {
      width: 100%;
      background-color: #f0f0f0;
      border-radius: 4px;
      overflow: hidden;
    }
    .progress {
      height: 20px;
      background-color: #4CAF50;
      width: 0%;
      transition: width 0.3s ease;
    }
    .progress-text {
      margin-top: 5px;
      font-size: 14px;
      color: #666;
    }
    .action-buttons {
      margin: 20px 0;
    }
    button {
      padding: 8px 16px;
      background-color: #4CAF50;
      color: white;
      border: none;
      border-radius: 4px;
      cursor: pointer;
      margin-right: 10px;
    }
    button:hover {
      background-color: #45a049;
    }
    button:disabled {
      background-color: #cccccc;
      cursor: not-allowed;
    }
    .status {
      margin-top: 10px;
      padding: 10px;
      border-radius: 4px;
    }
    .success {
      background-color: #e8f5e9;
      color: #2e7d32;
    }
    .error {
      background-color: #ffebee;
      color: #c62828;
    }
  </style>
</head>
<body>
  <h1>WebRTC File Transfer</h1>
  
  <div class="action-buttons">
    <button id="refreshBtn">Refresh File List</button>
  </div>
  
  <h2>Available Files</h2>
  <div class="file-list" id="fileList">
    <div class="file-item">Loading files...</div>
  </div>
  
  <div class="progress-container" id="progressContainer">
    <h3 id="currentFileName">Downloading file...</h3>
    <div class="progress-bar">
      <div class="progress" id="progressBar"></div>
    </div>
    <div class="progress-text" id="progressText">0%</div>
  </div>
  
  <div id="statusContainer"></div>

  <script src="/socket.io/socket.io.js"></script>
  <script src="/js/index.js"></script>
  <script>
    // Will be replaced with actual implementation from compiled client.ts
    document.addEventListener('DOMContentLoaded', () => {
      // Elements
      const fileListEl = document.getElementById('fileList');
      const progressContainer = document.getElementById('progressContainer');
      const progressBar = document.getElementById('progressBar');
      const progressText = document.getElementById('progressText');
      const currentFileName = document.getElementById('currentFileName');
      const refreshBtn = document.getElementById('refreshBtn');
      const statusContainer = document.getElementById('statusContainer');
      
      // Create client instance
      const client = new WebRTCFileClient();
      
      // Set up event handlers
      client.onProgress((progress) => {
        progressContainer.style.display = 'block';
        progressBar.style.width = `${progress}%`;
        progressText.innerText = `${Math.round(progress)}%`;
      });
      
      client.onComplete((file, fileName) => {
        showStatus('success', `File "${fileName}" downloaded successfully!`);
        client.saveFile(file, fileName);
        progressContainer.style.display = 'none';
      });
      
      client.onError((error) => {
        showStatus('error', `Error: ${error}`);
        progressContainer.style.display = 'none';
      });
      
      client.onFilesList((files) => {
        if (files.length === 0) {
          fileListEl.innerHTML = '<div class="file-item">No files available</div>';
          return;
        }
        
        fileListEl.innerHTML = '';
        files.forEach(file => {
          const fileItem = document.createElement('div');
          fileItem.className = 'file-item';
          
          // Create file info elements
          const nameEl = document.createElement('span');
          nameEl.textContent = file.name;
          
          const sizeEl = document.createElement('span');
          sizeEl.textContent = formatFileSize(file.size);
          
          fileItem.appendChild(nameEl);
          fileItem.appendChild(sizeEl);
          
          fileItem.addEventListener('click', () => {
            currentFileName.textContent = `Downloading ${file.name}`;
            progressContainer.style.display = 'block';
            progressBar.style.width = '0%';
            progressText.innerText = '0%';
            client.requestFile(file.name);
          });
          
          fileListEl.appendChild(fileItem);
        });
      });
      
      // Get initial file list
      client.getFilesList();
      
      // Set up refresh button
      refreshBtn.addEventListener('click', () => {
        fileListEl.innerHTML = '<div class="file-item">Loading files...</div>';
        client.getFilesList();
      });
      
      // Helper function to show status messages
      function showStatus(type, message) {
        const statusEl = document.createElement('div');
        statusEl.className = `status ${type}`;
        statusEl.textContent = message;
        
        statusContainer.innerHTML = '';
        statusContainer.appendChild(statusEl);
        
        // Clear the status after 5 seconds
        setTimeout(() => {
          statusEl.remove();
        }, 5000);
      }
      
      // Helper function to format file size
      function formatFileSize(bytes) {
        if (bytes === 0) return '0 Bytes';
        const k = 1024;
        const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
        const i = Math.floor(Math.log(bytes) / Math.log(k));
        return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
      }
    });
  </script>
</body>
</html>