"use client"
import { useEffect, useState, useCallback } from "react"
import { useRouter } from "next/navigation"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
import { Button } from "@/components/ui/button"
import { useToast } from "@/components/ui/use-toast"
import {
CheckCircle2,
Clock,
XCircle,
Copy,
ExternalLink,
Calendar,
Loader2,
} from "lucide-react"
type Pedido = {
id: string
status: string
valor_centavos: number
metodo_pagamento: string
pix_copia_cola: string | null
pix_qrcode_url: string | null
asaas_invoice_url: string | null
paid_at: string | null
clientes: { nome: string; email: string } | null
produtos: { nome: string; validade: string; midia: string | null } | null
}
const STATUS_PAGO = ["PAID", "RECEIVED", "CONFIRMED"]
const STATUS_CANCELADO = ["CANCELED", "CANCELLED", "OVERDUE", "REFUNDED"]
const LINK_AGENDAMENTO = process.env.NEXT_PUBLIC_AFTER_PAYMENT_REDIRECT ?? "/"
export default function PedidoStatus({ pedidoInicial }: { pedidoInicial: Pedido }) {
const router = useRouter()
const { toast } = useToast()
const [pedido, setPedido] = useState(pedidoInicial)
const [polling, setPolling] = useState(true)
const isPago = STATUS_PAGO.includes(pedido.status)
const isCancelado = STATUS_CANCELADO.includes(pedido.status)
const valorFormatado = (pedido.valor_centavos / 100).toLocaleString("pt-BR", {
style: "currency",
currency: "BRL",
})
const fetchStatus = useCallback(async () => {
try {
const res = await fetch(`/api/pedido/${pedido.id}`)
if (!res.ok) return
const data: Pedido = await res.json()
setPedido(data)
if (STATUS_PAGO.includes(data.status) || STATUS_CANCELADO.includes(data.status)) {
setPolling(false)
}
} catch {
// silencioso — tenta de novo no próximo ciclo
}
}, [pedido.id])
useEffect(() => {
if (!polling || isPago || isCancelado) return
const interval = setInterval(fetchStatus, 5000)
return () => clearInterval(interval)
}, [polling, isPago, isCancelado, fetchStatus])
function copiarPix() {
if (!pedido.pix_copia_cola) return
navigator.clipboard.writeText(pedido.pix_copia_cola)
toast({ title: "Código PIX copiado!" })
}
// ── Pago ──────────────────────────────────────────────────────────────
if (isPago) {
return (
{pedido.clientes?.nome}, seu certificado está sendo processado.
Próximo passo: agende sua validação
Para emitir o certificado, é obrigatório realizar uma videoconferência de
Clique no botão abaixo para continuar para o próximo passo.
O link também foi enviado para {pedido.clientes?.email}
Este pedido foi cancelado ou expirou.
PIX Copia e Cola
Valor: {valorFormatado}
Após o pagamento, a confirmação pode levar até 2 dias úteis.
O link do boleto também foi enviado para{" "}
{pedido.clientes?.email}
Aguarde enquanto confirmamos seu cartão.