import { NextResponse } from "next/server"
import { requireUser, isStaff } from "@/server/auth"
import { getTenantSmtp2goSubaccountId } from "@/server/tenant"
import { emailBounces, emailSummary } from "@/server/smtp2go"

export async function GET() {
  try {
    const user = await requireUser()

    // staff não deveria consumir /me (mas se cair aqui, bloqueia ou trate como preferir)
    if (isStaff(user.role)) {
      return NextResponse.json({ error: "FORBIDDEN_STAFF_USE_TENANTS_ENDPOINT" }, { status: 403 })
    }

    if (!user.tenantId) {
      return NextResponse.json({ error: "FORBIDDEN_NO_TENANT" }, { status: 403 })
    }

    const subaccount_id = await getTenantSmtp2goSubaccountId(user.tenantId)

    // Aqui já dá pra montar o "painel inicial" do cliente:
    // - summary e bounces (visão executiva)
    const [summary, bounces] = await Promise.all([
      emailSummary({ subaccount_id }),
      emailBounces({ subaccount_id }),
    ])

    return NextResponse.json({ summary, bounces })
  } catch (e: unknown) {
    const msg = e instanceof Error ? e.message : String(e ?? "")
    if (msg === "TENANT_MISSING_SUBACCOUNT_ID") {
      return NextResponse.json({ error: "Tenant não possui subconta vinculada.", code: "TENANT_MISSING_SUBACCOUNT_ID" }, { status: 422 })
    }

    const status = msg === "UNAUTHORIZED" ? 401 : msg.startsWith("FORBIDDEN") ? 403 : 500
    return NextResponse.json({ error: msg }, { status })
  }
}
