import 'package:http/http.dart' as http; import 'package:neomovies_mobile/data/models/movie.dart'; import 'package:neomovies_mobile/data/models/favorite.dart'; import 'package:neomovies_mobile/data/models/reaction.dart'; import 'package:neomovies_mobile/data/models/auth_response.dart'; import 'package:neomovies_mobile/data/models/user.dart'; import 'package:neomovies_mobile/data/api/neomovies_api_client.dart'; // новый клиент import 'package:neomovies_mobile/data/exceptions/auth_exceptions.dart'; class ApiClient { final NeoMoviesApiClient _neoClient; ApiClient(http.Client client) : _neoClient = NeoMoviesApiClient(client); // ---- Movies ---- Future> getPopularMovies({int page = 1}) { return _neoClient.getPopularMovies(page: page); } Future> getTopRatedMovies({int page = 1}) { return _neoClient.getTopRatedMovies(page: page); } Future> getUpcomingMovies({int page = 1}) { return _neoClient.getUpcomingMovies(page: page); } Future getMovieById(String id) { return _neoClient.getMovieById(id); } Future getTvById(String id) { return _neoClient.getTvShowById(id); } // ---- Search ---- Future> searchMovies(String query, {int page = 1}) { return _neoClient.search(query, page: page); } // ---- Favorites ---- Future> getFavorites() { return _neoClient.getFavorites(); } Future addFavorite( String mediaId, String mediaType, String title, String posterPath, ) { return _neoClient.addFavorite( mediaId: mediaId, mediaType: mediaType, title: title, posterPath: posterPath, ); } Future removeFavorite(String mediaId, {String mediaType = 'movie'}) { return _neoClient.removeFavorite(mediaId, mediaType: mediaType); } Future checkIsFavorite(String mediaId, {String mediaType = 'movie'}) { return _neoClient.checkIsFavorite(mediaId, mediaType: mediaType); } // ---- Reactions ---- Future> getReactionCounts( String mediaType, String mediaId) { return _neoClient.getReactionCounts( mediaType: mediaType, mediaId: mediaId, ); } Future setReaction( String mediaType, String mediaId, String reactionType) { return _neoClient.setReaction( mediaType: mediaType, mediaId: mediaId, reactionType: reactionType, ); } Future> getMyReactions() { return _neoClient.getMyReactions(); } // Get single user reaction for specific media Future getMyReaction(String mediaType, String mediaId) async { final reactions = await _neoClient.getMyReactions(); try { return reactions.firstWhere( (r) => r.mediaType == mediaType && r.mediaId == mediaId, ); } catch (e) { return null; // No reaction found } } // ---- External IDs (IMDb) ---- Future getImdbId(String mediaId, String mediaType) async { return _neoClient.getExternalIds(mediaId, mediaType); } // ---- Auth ---- Future register(String name, String email, String password) { return _neoClient.register( name: name, email: email, password: password, ).then((_) {}); // старый код ничего не возвращал } Future login(String email, String password) async { try { return await _neoClient.login(email: email, password: password); } catch (e) { final errorMessage = e.toString(); if (errorMessage.contains('Account not activated') || errorMessage.contains('not verified') || errorMessage.contains('Please verify your email')) { throw UnverifiedAccountException(email, message: errorMessage); } rethrow; } } Future verify(String email, String code) { return _neoClient.verifyEmail(email: email, code: code); } Future resendCode(String email) { return _neoClient.resendVerificationCode(email); } Future deleteAccount() { return _neoClient.deleteAccount(); } }