package com.bookshop.structural.facade;
import com.bookshop.domain.Book;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** Subsystem 1: stock levels and reservations. */
public class InventoryService {
private final Map<String, Integer> stockByIsbn = new HashMap<>();
public void stock(Book book, int copies) {
stockByIsbn.merge(book.isbn(), copies, Integer::sum);
}
public boolean isInStock(List<Book> books) {
return books.stream().allMatch(b -> stockByIsbn.getOrDefault(b.isbn(), 0) > 0);
}
public void reserve(List<Book> books) {
for (Book book : books) {
stockByIsbn.merge(book.isbn(), -1, Integer::sum);
}
}
public int stockLevel(Book book) {
return stockByIsbn.getOrDefault(book.isbn(), 0);
}
}