import { requireAdmin } from '@/lib/auth'
import { updateProgress } from '../upload/route'

export const dynamic = 'force-dynamic'

export async function GET(request: Request) {
  const adminCheck = await requireAdmin()
  if (adminCheck) return adminCheck

  const url = new URL(request.url)
  const updateId = url.searchParams.get('updateId')

  if (!updateId) {
    return new Response('Update ID required', { status: 400 })
  }

  const encoder = new TextEncoder()
  
  const stream = new ReadableStream({
    start(controller) {
      const interval = setInterval(() => {
        const progress = updateProgress.get(updateId)
        
        if (progress) {
          const data = JSON.stringify({
            phase: progress.phase,
            progress: progress.progress,
            message: progress.message,
            details: progress.details
          })
          controller.enqueue(encoder.encode(`data: ${data}\n\n`))

          // Close stream on completion or error
          if (progress.phase === 'complete' || progress.phase === 'error') {
            clearInterval(interval)
            controller.close()
          }
        } else {
          // No progress data found, send waiting state
          const data = JSON.stringify({
            phase: 'waiting',
            progress: 0,
            message: 'Waiting for update to start...'
          })
          controller.enqueue(encoder.encode(`data: ${data}\n\n`))
        }
      }, 500)

      // Clean up after 10 minutes
      setTimeout(() => {
        clearInterval(interval)
        controller.close()
      }, 600000)
    }
  })

  return new Response(stream, {
    headers: {
      'Content-Type': 'text/event-stream',
      'Cache-Control': 'no-cache',
      'Connection': 'keep-alive',
    },
  })
}
