import 'package:encrypt_shared_preferences/provider.dart'; import 'package:get/get.dart'; import 'package:f0ckapp/models/media_item.dart'; const List mediaTypes = ["alles", "image", "video", "audio"]; const List mediaModes = ["sfw", "nsfw", "untagged", "all"]; class MediaService extends GetConnect { final EncryptedSharedPreferencesAsync storage = EncryptedSharedPreferencesAsync.getInstance(); Future> fetchMediaItems({ required int type, required int mode, required int random, String? tag, int? older, }) async { final String? token = await storage.getString('token'); final Map headers = token != null ? {'Authorization': 'Bearer $token'} : {}; final queryParameters = { 'type': type.toString(), 'mode': mode.toString(), 'random': random.toString(), if (tag != null) 'tag': tag, if (older != null) 'older': older.toString(), }; try { final Response response = await get( 'https://api.f0ck.me/items/get', query: queryParameters, headers: headers, ); if (response.status.code == 200 && response.body is List) { final data = response.body as List; return data.map((json) => MediaItem.fromJson(json)).toList(); } else { return Future.error('Fehler beim Laden der Daten: ${response.body}'); } } catch (e) { return Future.error('Netzwerkfehler: ${e.toString()}'); } } Future?> toggleFavorite( MediaItem item, bool isFavorite, ) async { final String? token = await storage.getString('token'); if (token == null) return null; final headers = { 'Authorization': 'Bearer $token', 'Content-Type': 'application/json', }; try { Response response; if (!isFavorite) { response = await put( 'https://api.f0ck.me/favorites/${item.id}', null, headers: headers, ); } else { response = await delete( 'https://api.f0ck.me/favorites/${item.id}', headers: headers, ); } if (response.status.code == 200 && response.body is List) { return (response.body as List) .map((json) => Favorite.fromJson(json)) .toList(); } else { return null; } } catch (e) { return null; } } Future fetchItem(int itemId) async { final String? token = await storage.getString('token'); final Map headers = token != null ? {'Authorization': 'Bearer $token'} : {}; try { final Response response = await get( 'https://api.f0ck.me/item/$itemId', headers: headers, ); if (response.status.code == 200 && response.body is Map) { return MediaItem.fromJson(response.body); } return null; } catch (e) { return null; } } }