// One-off backfill: wraps every pre-existing Workspace (created before the
// Organization layer existed) in its own new Organization of the same name,
// carrying over WorkspaceMember roles as OrganizationMember roles so nobody
// loses access. Safe to re-run — it only touches workspaces with no
// organizationId yet.
import { prisma } from "../src/lib/prisma";
import { uniqueOrganizationSlug } from "../src/lib/slugs";

async function main() {
  const workspaces = await prisma.workspace.findMany({
    where: { organizationId: null },
    include: { members: true },
  });

  console.log(`Found ${workspaces.length} workspace(s) without an organization.`);

  for (const ws of workspaces) {
    const slug = await uniqueOrganizationSlug(ws.name);
    const org = await prisma.organization.create({
      data: {
        name: ws.name,
        slug,
        logoUrl: ws.logoUrl,
        members: {
          create: ws.members.map((m) => ({
            userId: m.userId,
            role: m.role === "ADMIN" ? "ADMIN" : "MEMBER",
          })),
        },
      },
    });
    await prisma.workspace.update({ where: { id: ws.id }, data: { organizationId: org.id } });
    console.log(`  wrapped "${ws.name}" (${ws.id}) -> organization "${org.name}" (${org.id})`);
  }

  const remaining = await prisma.workspace.count({ where: { organizationId: null } });
  console.log(`Done. Workspaces still missing an organization: ${remaining}`);
}

main()
  .then(() => process.exit(0))
  .catch((err) => {
    console.error(err);
    process.exit(1);
  });
