import api from "./client"; import type { BookDetail, BookListItem, BookSearchParams, ContentResponse, EBookDetail, EBookListItem, ReadingProgress, ReadingSettings, TocResponse, } from "../types/book"; export const booksApi = { async getEBooks(): Promise { const { data } = await api.get("/books/ebooks/"); return data; }, async getEBook(id: number): Promise { const { data } = await api.get(`/books/ebooks/${id}/`); return data; }, async searchBooks(params: BookSearchParams = {}): Promise<{ count: number; results: BookListItem[] }> { const { data } = await api.get<{ count: number; results: BookListItem[] }>("/books/", { params }); return data; }, async getBook(id: number): Promise { const { data } = await api.get(`/books/${id}/`); return data; }, async getGenres(): Promise { const { data } = await api.get("/books/genres/"); return data; }, async getAuthors(): Promise { const { data } = await api.get("/books/authors/"); return data; }, async uploadEBook( file: File, title: string, author: string, coverImage?: File | null, ): Promise { const formData = new FormData(); formData.append("file", file); formData.append("title", title); if (author) formData.append("author", author); if (coverImage) formData.append("cover_image", coverImage); const { data } = await api.post("/books/ebooks/", formData, { headers: { "Content-Type": "multipart/form-data" }, }); return data; }, async deleteEBook(id: number): Promise { await api.delete(`/books/ebooks/${id}/`); }, async processEBook(id: number): Promise<{ status: string }> { const { data } = await api.post<{ status: string }>(`/books/ebooks/${id}/process/`); return data; }, async getToc(id: number): Promise { const { data } = await api.get(`/books/ebooks/${id}/toc/`); return data; }, async getContent(id: number, page: number): Promise { const { data } = await api.get(`/books/ebooks/${id}/content/?page=${page}`); return data; }, async getProgress(ebookId: number): Promise { const { data } = await api.get(`/books/ebooks/${ebookId}/progress/`); return data; }, async updateProgress(ebookId: number, progressData: Partial): Promise { const { data } = await api.patch(`/books/ebooks/${ebookId}/progress/`, progressData); return data; }, async getSettings(): Promise { const { data } = await api.get("/books/settings/"); return data; }, async updateSettings(settingsData: Partial): Promise { const { data } = await api.patch("/books/settings/", settingsData); return data; }, };