import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import './styles/index.css';
import App from './App.tsx';

const isTauri = 'window' in globalThis && '__TAURI_INTERNALS__' in window;
if (isTauri) {
  const TARGET = 'https://dumpster.dustin.coffee';
  const WS_TARGET = 'wss://dumpster.dustin.coffee';
  
  const originalFetch = window.fetch;
  window.fetch = async (input, init) => {
    if (typeof input === 'string' && input.startsWith('/')) {
      input = TARGET + input;
    }
    return originalFetch(input, init);
  };

  const OriginalWebSocket = window.WebSocket;
  window.WebSocket = function(url: string | URL, protocols?: string | string[]) {
    let urlStr = typeof url === 'string' ? url : url.toString();
    if (urlStr.includes('tauri.localhost') || urlStr.includes('tauri://localhost')) {
      urlStr = urlStr.replace(/^(wss?|https?|tauri):\/\/tauri\.localhost/, WS_TARGET);
      urlStr = urlStr.replace(/^tauri:\/\/localhost/, WS_TARGET);
    } else if (urlStr.startsWith('ws://localhost') && isTauri) {
      urlStr = urlStr.replace('ws://localhost', WS_TARGET);
    } else if (urlStr.startsWith('/')) {
      urlStr = WS_TARGET + urlStr;
    }
    return new OriginalWebSocket(urlStr, protocols);
  } as unknown as typeof WebSocket;
  window.WebSocket.prototype = OriginalWebSocket.prototype;
}

createRoot(document.getElementById('root')!).render(
  <StrictMode>
    <App />
  </StrictMode>,
);
