import { NextResponse } from 'next/server'
import { existsSync, readFileSync } from 'node:fs'
import path from 'node:path'

// GET() sem parâmetros seria tratado como rota estática pelo Next e cacheado
// permanentemente a partir do build — precisa ser explicitamente dinâmico.
export const dynamic = 'force-dynamic'

const REPO_ROOT   = path.resolve(process.cwd(), '..')
const STATUS_FILE = path.join(REPO_ROOT, 'data', 'logs', 'etl-status.json')

function pidRunning(pid: number): boolean {
  try { process.kill(pid, 0); return true } catch { return false }
}

function tailFile(filePath: string, n = 120): string[] {
  if (!existsSync(filePath)) return []
  try {
    const content = readFileSync(filePath, 'utf8')
    return content.split('\n').slice(-n)
  } catch { return [] }
}

export async function GET() {
  if (!existsSync(STATUS_FILE)) {
    return NextResponse.json({ running: false, mes_ano: null, logs: [] })
  }

  let status: Record<string, unknown>
  try {
    status = JSON.parse(readFileSync(STATUS_FILE, 'utf8'))
  } catch {
    return NextResponse.json({ running: false, mes_ano: null, logs: [] })
  }

  // Reconcilia: processo pode ter terminado sem atualizar o arquivo (dev reload etc.)
  if (status.running && status.pid && !pidRunning(Number(status.pid))) {
    status.running     = false
    status.finished_at = status.finished_at ?? new Date().toISOString()
  }

  const logs = tailFile(status.log_file as string)

  return NextResponse.json({ ...status, logs })
}
