import 'package:flutter_bloc/flutter_bloc.dart'; import '../models/models.dart'; import '../constants/constants.dart'; // Events sealed class BookEvent {} class AddBook extends BookEvent { final Book book; AddBook(this.book); } class UpdateBook extends BookEvent { final Book book; UpdateBook(this.book); } class DeleteBook extends BookEvent { final String id; DeleteBook(this.id); } class ToggleFavorite extends BookEvent { final String id; ToggleFavorite(this.id); } // State class BookState { final List books; const BookState({required this.books}); } // Bloc class BookBloc extends Bloc { BookBloc() : super(const BookState(books: initialBooks)) { on((event, emit) { emit(BookState(books: [...state.books, event.book])); }); on((event, emit) { final updated = state.books.map((b) { return b.id == event.book.id ? event.book : b; }).toList(); emit(BookState(books: updated)); }); on((event, emit) { emit( BookState(books: state.books.where((b) => b.id != event.id).toList()), ); }); on((event, emit) { final updated = state.books.map((b) { if (b.id != event.id) return b; return ( id: b.id, title: b.title, author: b.author, genre: b.genre, annotation: b.annotation, coverUrl: b.coverUrl, pages: b.pages, language: b.language, publishedYear: b.publishedYear, rating: b.rating, status: b.status, progress: b.progress, isFavorite: !b.isFavorite, ); }).toList(); emit(BookState(books: updated)); }); } }