package com.nisum.poc.springwebfluxdemo.service;

import com.nisum.poc.springwebfluxdemo.entity.Book;
import com.nisum.poc.springwebfluxdemo.repositories.BookRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookRepo bookRepo;

    @Override
    public Mono<Book> create(Book book) {
        return bookRepo.save(book);
    }

    @Override
    public Flux<Book> getAllBooks() {
        return bookRepo.findAll();

    }

    @Override
    public Mono<Book> getBook(Integer bookId) {
        // return bookRepo.findById(bookId);
        return bookRepo.findById(Mono.just(bookId));
    }

    @Override
    public Mono<Book> updateBook(Book book, Integer bookId) {
        Mono<Book> oldBook = bookRepo.findById(bookId);

        return oldBook.flatMap(book1 -> {
            book1.setName(book.getName());
            book1.setAuthor(book.getAuthor());
            book1.setDesc(book.getDesc());
            book1.setPubliser(book.getPubliser());

            return bookRepo.save(book1);

        });

    }

    @Override
    public Mono<Void> deleteBook(Integer bookId) {
        return bookRepo.findById(bookId).flatMap(book -> bookRepo.delete(book));

    }

}