import 'package:flutter_bloc/flutter_bloc.dart'; import '../../models/models.dart'; import 'wishlist_event.dart'; import 'wishlist_state.dart'; class WishlistBloc extends Bloc { WishlistBloc() : super(WishlistState.initial()) { on(_onLoadWishlist); on(_onRemoveFromWishlist); on(_onSearchWishlist); on(_onMoveToLibrary); } static List get _initialBooks => [ createBook( id: '2', title: '1984', author: 'Джордж Оруэлл', genre: 'Dystopian', annotation: 'Антиутопия о тоталитарном государстве, где мысли контролируются, а правда переменчива.', coverUrl: 'https://picsum.photos/seed/1984/400/600', pages: 328, language: 'English', publishedYear: 1949, rating: 4.9, status: BookStatus.wantToRead, isFavorite: true, ), ]; void _onLoadWishlist(LoadWishlist event, Emitter emit) { final wishlistBooks = _initialBooks.where((book) { return book.status == BookStatus.wantToRead || book.isFavorite; }).toList(); emit(state.copyWith( books: wishlistBooks, filteredBooks: wishlistBooks, isLoading: false, )); } void _onRemoveFromWishlist(RemoveFromWishlist event, Emitter emit) { final updatedBooks = state.books.where((book) => book.id != event.bookId).toList(); final updatedFiltered = state.filteredBooks.where((book) => book.id != event.bookId).toList(); emit(state.copyWith( books: updatedBooks, filteredBooks: updatedFiltered, )); } void _onSearchWishlist(SearchWishlist event, Emitter emit) { final query = event.query.toLowerCase(); final filtered = state.books.where((book) { return book.title.toLowerCase().contains(query) || book.author.toLowerCase().contains(query) || book.genre.toLowerCase().contains(query); }).toList(); emit(state.copyWith( searchQuery: event.query, filteredBooks: filtered, )); } void _onMoveToLibrary(MoveToLibrary event, Emitter emit) { final updatedBooks = state.books.map((book) { if (book.id == event.bookId) { return book.copyWith( status: BookStatus.reading, ); } return book; }).toList(); final updatedFiltered = state.filteredBooks.map((book) { if (book.id == event.bookId) { return book.copyWith( status: BookStatus.reading, ); } return book; }).toList(); emit(state.copyWith( books: updatedBooks, filteredBooks: updatedFiltered, movedBookId: event.bookId, )); } }