
// API routes handler
import realtime from './realtime';
import settingsApi from './settings';

/**
 * Simple API router for client-side application
 */
const api = {
  /**
   * Handle API requests
   */
  async handleRequest(path, method, body) {
    console.log(`API request: ${method} ${path}`, body);
    
    // Route to the appropriate handler
    if (path === '/api/realtime') {
      console.log("Routing to realtime handler");
      return await realtime(body);
    } else if (path === '/api/settings' || path.startsWith('/api/settings/')) {
      console.log("Routing to settings handler");
      return await settingsApi(body, path);
    }
    
    // Return 404 for unknown routes
    console.error(`Endpoint not found: ${path}`);
    return {
      status: 404,
      json: {
        ok: false,
        error_code: 404,
        description: "Endpoint not found"
      }
    };
  }
};

// Mock fetch override for development
const originalFetch = window.fetch;
window.fetch = async (url, options = {}) => {
  // Check if this is an API request to our mock endpoints
  if (typeof url === 'string' && url.startsWith('/api/')) {
    console.log('Intercepting API request:', url, options);
    
    try {
      let body = {};
      
      // Properly handle different body types
      if (options.body) {
        if (typeof options.body === 'string') {
          body = JSON.parse(options.body);
        } else {
          // Handle ReadableStream or other BodyInit types
          const bodyText = await new Response(options.body).text();
          body = bodyText ? JSON.parse(bodyText) : {};
        }
      }
      
      const result = await api.handleRequest(url, options.method || 'GET', body);
      
      // Create a proper Response object
      return new Response(JSON.stringify(result.json), {
        status: result.status,
        headers: {
          'Content-Type': 'application/json',
        },
      });
    } catch (error) {
      console.error('Error in API handler:', error);
      return new Response(JSON.stringify({
        success: false,
        message: 'Internal server error'
      }), {
        status: 500,
        headers: {
          'Content-Type': 'application/json',
        },
      });
    }
  }
  
  // For all other requests, use the original fetch
  return originalFetch(url, options);
};

export default api;