import { useState, useEffect } from 'react'
import { syncProgressManager } from '@/lib/syncProgressManager'
import type { SyncProgress } from '@/lib/userContentSync'
import { t } from '@/lib/i18n'

export function GlobalSyncProgressBar(): React.ReactElement | null {
  const [progress, setProgress] = useState<SyncProgress | null>(null)

  useEffect(() => {
    const unsubscribe = syncProgressManager.subscribe((newProgress) => {
      setProgress(newProgress)
    })

    return () => {
      unsubscribe()
    }
  }, [])

  if (!progress || progress.completed) {
    return null
  }

  // Extract relay name from URL (remove wss:// and truncate if too long)
  const getRelayDisplayName = (relayUrl?: string): string => {
    if (!relayUrl) {
      return 'Connecting...'
    }
    const cleaned = relayUrl.replace(/^wss?:\/\//, '').replace(/\/$/, '')
    if (cleaned.length > 50) {
      return `${cleaned.substring(0, 47)}...`
    }
    return cleaned
  }

  // Spinning sync icon
  const SyncIcon = (): React.ReactElement => (
    <svg
      className="animate-spin h-5 w-5 text-neon-cyan"
      xmlns="http://www.w3.org/2000/svg"
      fill="none"
      viewBox="0 0 24 24"
    >
      <circle
        className="opacity-25"
        cx="12"
        cy="12"
        r="10"
        stroke="currentColor"
        strokeWidth="4"
      />
      <path
        className="opacity-75"
        fill="currentColor"
        d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
      />
    </svg>
  )

  return (
    <div className="fixed top-0 left-0 right-0 z-50 bg-cyber-darker border-b border-neon-cyan/30 shadow-lg">
      <div className="container mx-auto px-4 py-3">
        <div className="flex items-center gap-3">
          <SyncIcon />
          {progress.currentRelay && (
            <span className="text-neon-cyan text-sm font-mono">
              {getRelayDisplayName(progress.currentRelay)}
            </span>
          )}
          {!progress.currentRelay && (
            <span className="text-cyber-accent/70 text-sm italic">
              {t('settings.sync.connecting')}
            </span>
          )}
        </div>
      </div>
    </div>
  )
}
