from fastapi import APIRouter, HTTPException

from tests.mocks.mock_storage import mock_storage

router = APIRouter(prefix="/books", tags=["books"])


@router.post("/")
def create_book(book: dict):
    return mock_storage.create_book(book["title"], book["description"])


@router.get("/")
def read_books():
    books = mock_storage.get_all_books()
    return {"books": books, "total": len(books)}


@router.get("/{book_id}")
def get_book(book_id: int):
    book = mock_storage.get_book(book_id)
    if not book:
        raise HTTPException(status_code=404, detail="Book not found")

    authors = mock_storage.get_authors_by_book(book_id)
    book_with_authors = book.copy()
    book_with_authors["authors"] = authors
    return book_with_authors


@router.put("/{book_id}")
def update_book(book_id: int, book: dict):
    updated_book = mock_storage.update_book(
        book_id, book.get("title"), book.get("description")
    )
    if not updated_book:
        raise HTTPException(status_code=404, detail="Book not found")
    return updated_book


@router.delete("/{book_id}")
def delete_book(book_id: int):
    book = mock_storage.delete_book(book_id)
    if not book:
        raise HTTPException(status_code=404, detail="Book not found")
    return book
