import '../../../../../core/locator/locator.dart';
import '../../../../../core/network/api_provider_imp.dart';
import '../../../domain/entities/avatar_character.dart';

/// دادهٔ شخصیت‌های آواتار از backend (دریافت، خرید، انتخاب).
class AvatarApiProvider {
  ApiProviderImp get _api => locator<ApiProviderImp>();

  Future<AvatarCatalog> getAvatars() async {
    final res = await _api.get('/avatars');
    if (res.statusCode != 200) {
      throw Exception('avatars: ${res.statusCode}');
    }
    final list = (res.data['avatars'] as List?) ?? const [];
    final avatars = list
        .map((e) => AvatarCharacter.fromJson(Map<String, dynamic>.from(e as Map)))
        .toList();
    return AvatarCatalog(
      avatars: avatars,
      selected: (res.data['selected'] ?? '') as String,
    );
  }

  /// خرید؛ null یعنی موفق، وگرنه پیامِ خطای فارسی.
  Future<String?> buyAvatar(String id) => _post('/shop/buy-avatar', id);

  /// انتخاب؛ id خالی ⇒ بازگشت به آواتارِ تصادفی. null یعنی موفق.
  Future<String?> selectAvatar(String id) => _post('/shop/select-avatar', id);

  Future<String?> _post(String path, String id) async {
    final res = await _api.post(path, body: {'avatar_id': id});
    if (res.statusCode == 200) return null;
    switch (res.statusCode) {
      case 402:
        return 'سکهٔ کافی ندارید';
      case 403:
        return 'این شخصیت را ندارید';
      case 409:
        return 'این شخصیت را دارید';
      default:
        return 'عملیات ناموفق بود';
    }
  }
}
