import 'dart:math';

import 'package:im_app/domain/entities/user.dart';
import 'package:im_app/domain/repositories/user_repository.dart';

/// 更新前10个用户名称用例
///
/// ## 职责
/// - 取前10个用户
/// - 随机生成新昵称（6位随机字母 + uid）
/// - 批量更新到 DB
///
/// ## 数据流
/// ```
/// ViewModel
///   → UpdateUsersUseCase.execute(users)
///     → 取前10条
///     → 随机生成昵称
///     → UserRepository.updateUsersBatch(targets)
///   ← 更新后的用户列表
/// ```
class UpdateUsersUseCase {
  final UserRepository _repo;
  final _random = Random();

  UpdateUsersUseCase({required UserRepository userRepository})
    : _repo = userRepository;

  String _randomWord() {
    const letters = 'abcdefghijklmnopqrstuvwxyz';
    return List.generate(
      6,
      (_) => letters[_random.nextInt(letters.length)],
    ).join();
  }

  /// 更新前10个用户的昵称
  ///
  /// [users] 当前用户列表，取前10条更新
  /// 返回更新后的前10个用户，供 ViewModel 直接反映到 UI
  Future<List<User>> execute(List<User> users) async {
    if (users.isEmpty) return [];

    final targets = users
        .take(10)
        .map((u) => u.copyWith(nickname: '${_randomWord()}_${u.uid}'))
        .toList();

    await _repo.updateUsersBatch(targets);

    return targets;
  }
}
