import { User } from "@/db/models";
import { isMysqlActive } from "@/db/activeDatabase";

/** Primary seeded admin — always SUPER_ADMIN after migration. */
export const PRIMARY_SUPER_ADMIN_EMAIL = "admin@safarlibya.com";

/**
 * Idempotent: promote legacy ADMIN → SUPER_ADMIN and lock primary inbox as SUPER_ADMIN.
 * Safe to run on every boot (Mongo mode only).
 */
export async function migrateAdminRoles() {
  if (isMysqlActive()) {
    return {
      legacyPromoted: 0,
      primaryEmail: PRIMARY_SUPER_ADMIN_EMAIL,
      primaryRole: null as string | null,
      primaryStatus: null as string | null,
      primaryFound: false,
      skipped: true as const,
      reason: "ACTIVE_DATABASE=mysql",
    };
  }

  const legacy = await User.updateMany(
    { role: "ADMIN", deletedAt: null },
    { $set: { role: "SUPER_ADMIN" } },
  );

  const primary = await User.findOneAndUpdate(
    { email: PRIMARY_SUPER_ADMIN_EMAIL },
    {
      $set: {
        role: "SUPER_ADMIN",
        status: "ACTIVE",
        deletedAt: null,
      },
      $setOnInsert: {
        fullName: "Safar Libya Admin",
        locale: "ar",
        emailVerifiedAt: new Date(),
      },
    },
    { upsert: false, new: true },
  );

  return {
    legacyPromoted: legacy.modifiedCount,
    primaryEmail: PRIMARY_SUPER_ADMIN_EMAIL,
    primaryRole: primary?.role ?? null,
    primaryStatus: primary?.status ?? null,
    primaryFound: Boolean(primary),
  };
}
