import { eq } from "drizzle-orm";
import { getTranslations } from "next-intl/server";

import { requireOrgMember } from "@/lib/auth-guards";
import { listMembers } from "@/lib/data/team";
import { db } from "@/lib/db";
import { organization } from "@/lib/db/schema";

import { DangerZone } from "./danger-zone";
import { OrganizationForm } from "./organization-form";

export default async function OrganizationSettingsPage() {
  const { activeOrganizationId, role } = await requireOrgMember({ minRole: "admin" });

  const t = await getTranslations("Settings.organization");
  const [orgRow] = await db
    .select({ id: organization.id, name: organization.name, slug: organization.slug })
    .from(organization)
    .where(eq(organization.id, activeOrganizationId))
    .limit(1);
  if (!orgRow) throw new Error("Active organization missing");

  const members = await listMembers(activeOrganizationId);
  const admins = members.filter((m) => m.role === "admin");

  return (
    <section className="flex flex-col gap-8">
      <div className="flex flex-col gap-1">
        <h2 className="text-xl font-semibold">{t("title")}</h2>
        <p className="text-sm text-muted-foreground">
          {t("description", { orgName: orgRow.name })}
        </p>
      </div>
      <OrganizationForm defaultName={orgRow.name} slug={orgRow.slug} />
      {role === "owner" && (
        <DangerZone
          orgName={orgRow.name}
          admins={admins.map((a) => ({ memberId: a.id, name: a.name, email: a.email }))}
        />
      )}
    </section>
  );
}
