import * as mongoose from 'mongoose';
import * as dotenv from 'dotenv';
dotenv.config();

async function run() {
  const uri = process.env.MONGO_URI || 'mongodb://localhost:27017/lifther';
  await mongoose.connect(uri);
  const db = mongoose.connection.db;
  console.log('Connected to DB:', uri);

  // Step 1: get admin & super_admin role IDs from the "roles" collection
  const adminRoles = await db
    .collection('roles')
    .find({ name: { $in: ['admin', 'super_admin'] } })
    .toArray();

  const adminRoleIds = adminRoles.map((r) => r._id);
  console.log(`Found ${adminRoleIds.length} admin role(s)`);

  // Step 2: get IDs of users who have an admin role
  const adminUsers = await db
    .collection('users')
    .find({ role_id: { $in: adminRoleIds } })
    .toArray();

  const adminUserIds = adminUsers.map((u) => u._id);
  console.log(`Found ${adminUserIds.length} admin user(s)`);

  // Step 3: set group_type: "admin" for all groups created by admin users
  // (no group_type filter — also fixes records incorrectly set by a previous migration)
  const result = await db.collection('groups').updateMany(
    { created_by: { $in: adminUserIds } },
    { $set: { group_type: 'admin' } },
  );

  console.log(`Matched: ${result.matchedCount} group(s) | Newly updated: ${result.modifiedCount}`);
  await mongoose.disconnect();
}

run().catch((err) => {
  console.error('Migration error:', err);
  process.exit(1);
});
