import { createSlice, PayloadAction } from '@reduxjs/toolkit';

export interface Book {
  id: string;
  title: string;
  slug: string;
  isbn: string;
  description: string;
  price: number;
  discountPrice?: number;
  stock: number;
  format: string;
  language: string;
  publisher: string;
  publicationDate: string;
  pageCount: number;
  coverImage?: string;
  ratingAverage: number;
  ratingCount: number;
  authorName?: string;
  categoryName?: string;
}

interface BookState {
  books: Book[];
  featuredBooks: Book[];
  selectedBook: Book | null;
  loading: boolean;
  searchQuery: string;
  selectedCategory: string | null;
  selectedLanguage: string | null;
}

const initialState: BookState = {
  books: [],
  featuredBooks: [],
  selectedBook: null,
  loading: false,
  searchQuery: '',
  selectedCategory: null,
  selectedLanguage: null,
};

export const bookSlice = createSlice({
  name: 'books',
  initialState,
  reducers: {
    setBooks: (state, action: PayloadAction<Book[]>) => {
      state.books = action.payload;
    },
    setFeaturedBooks: (state, action: PayloadAction<Book[]>) => {
      state.featuredBooks = action.payload;
    },
    setSelectedBook: (state, action: PayloadAction<Book | null>) => {
      state.selectedBook = action.payload;
    },
    setSearchQuery: (state, action: PayloadAction<string>) => {
      state.searchQuery = action.payload;
    },
    setSelectedCategory: (state, action: PayloadAction<string | null>) => {
      state.selectedCategory = action.payload;
    },
    setSelectedLanguage: (state, action: PayloadAction<string | null>) => {
      state.selectedLanguage = action.payload;
    },
    setLoading: (state, action: PayloadAction<boolean>) => {
      state.loading = action.payload;
    },
  },
});

export const {
  setBooks,
  setFeaturedBooks,
  setSelectedBook,
  setSearchQuery,
  setSelectedCategory,
  setSelectedLanguage,
  setLoading,
} = bookSlice.actions;

export default bookSlice.reducer;
