select_friend_logic.dart 1.53 KB
import 'package:doublefeel_flutter/core/network/api/friend_api.dart';
import 'package:get/get.dart';

import '../data/friends_repository.dart';
import '../models/friend_health_data.dart';

class SelectFriendLogic {
  SelectFriendLogic({FriendsRepository? repository})
      : _repository =
            repository ?? FriendsRepositoryImpl(Get.find<FriendApi>());

  final FriendsRepository _repository;
  final friends = <FriendHealthData>[].obs;
  final isLoading = false.obs;
  final selectedIndex = (-1).obs;

  Future<void> initialize() async {
    if (isLoading.value) return;
    isLoading.value = true;
    try {
      friends.assignAll(await _repository.getFriends());
      final watchFaceIndex = friends.indexWhere(
        (friend) => friend.isOnWatchFace,
      );
      selectedIndex.value = friends.isEmpty
          ? -1
          : watchFaceIndex < 0
              ? 0
              : watchFaceIndex;
    } finally {
      isLoading.value = false;
    }
  }

  void selectFriendAt(int index) {
    if (index < 0 || index >= friends.length) return;
    selectedIndex.value = index;
  }

  Future<FriendHealthData?> syncSelectedFriendToWatchFace() async {
    final index = selectedIndex.value;
    if (index < 0 || index >= friends.length) return null;

    final selectedFriend = friends[index];
    if (selectedFriend.isOnWatchFace) {
      return null;
    }

    final userId = selectedFriend.userId;
    if (userId == null) return null;

    await _repository.selectWatchFaceFriend(userId);
    return selectedFriend;
  }

  void dispose() {}
}