import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
import type { PaymentState } from '@/types';
import { paymentService } from '@/services/payment.service';

const initialState: PaymentState = {
  transactions: [],
  isLoading: false,
  error: null,
};

export const fetchTransactions = createAsyncThunk(
  'payment/fetchTransactions',
  async (_, { rejectWithValue }) => {
    try {
      const response = await paymentService.getTransactions();
      return response.data;
    } catch (error: unknown) {
      const err = error as { response?: { data?: { message?: string } } };
      return rejectWithValue(err?.response?.data?.message || 'Failed to fetch transactions');
    }
  },
);

const paymentSlice = createSlice({
  name: 'payment',
  initialState,
  reducers: {
    clearPayments(state) {
      state.transactions = [];
      state.error = null;
    },
  },
  extraReducers: (builder) => {
    builder
      .addCase(fetchTransactions.pending, (state) => { state.isLoading = true; state.error = null; })
      .addCase(fetchTransactions.fulfilled, (state, action) => { state.isLoading = false; state.transactions = action.payload; })
      .addCase(fetchTransactions.rejected, (state, action) => { state.isLoading = false; state.error = action.payload as string; });
  },
});

export const { clearPayments } = paymentSlice.actions;
export default paymentSlice.reducer;
