import { NextRequest, NextResponse } from "next/server"

import { createMachineSession } from "@/server/machines-session"

const ERROR_TEMPLATE = `
<!doctype html>
<html lang="pt-BR">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Falha na autenticação da máquina</title>
    <style>
      body { font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background-color: #0f172a; color: #e2e8f0; margin: 0; display: grid; place-items: center; height: 100vh; }
      main { max-width: 480px; padding: 32px; border-radius: 16px; background-color: rgba(15, 23, 42, 0.65); box-shadow: 0 18px 42px rgba(15, 23, 42, 0.45); text-align: center; backdrop-filter: blur(10px); }
      h1 { margin: 0 0 12px; font-size: 1.6rem; }
      p { margin: 6px 0; line-height: 1.5; }
      a { display: inline-block; margin-top: 18px; padding: 10px 16px; border-radius: 10px; background-color: #2563eb; color: #fff; text-decoration: none; font-weight: 600; }
      a:hover { background-color: #1d4ed8; }
    </style>
  </head>
  <body>
    <main>
      <h1>Não foi possível autenticar esta máquina</h1>
      <p>O token informado é inválido, expirou ou não está mais associado a uma máquina ativa.</p>
      <p>Volte ao agente desktop, gere um novo token ou realize o provisionamento novamente.</p>
      <a href="/">Voltar para o Sistema de Chamados</a>
    </main>
  </body>
</html>
`

export async function GET(request: NextRequest) {
  const token = request.nextUrl.searchParams.get("token")
  if (!token) {
    return NextResponse.redirect(new URL("/", request.nextUrl.origin))
  }

  const redirectParam = request.nextUrl.searchParams.get("redirect") ?? "/"
  const redirectUrl = new URL(redirectParam, request.nextUrl.origin)

  try {
    const session = await createMachineSession(token, true)
    const response = NextResponse.redirect(redirectUrl)

    session.headers.forEach((value, key) => {
      if (key.toLowerCase() === "set-cookie") {
        response.headers.append("set-cookie", value)
      } else {
        response.headers.set(key, value)
      }
    })

    return response
  } catch (error) {
    console.error("[machines.handshake] Falha ao autenticar máquina", error)
    return new NextResponse(ERROR_TEMPLATE, {
      status: 500,
      headers: {
        "Content-Type": "text/html; charset=utf-8",
      },
    })
  }
}

