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

interface Alarm {
  id: string;
  identifiant: string;
  hostname: string;
  id_ticket: string;
  description: string;
  action: string;
  severity: string;
  serviceId: string;
  stateId: string;
  service?: {
    id: string;
    name: string;
  };
  state?: {
    id: string;
    nom: string;
  };
}

interface AlarmsState {
  alarms: Alarm[];
  loading: boolean;
  error: string | null;
}

const initialState: AlarmsState = {
  alarms: [],
  loading: false,
  error: null,
};

export const fetchAlarms = createAsyncThunk(
  'alarms/fetchAlarms',
  async (_, { rejectWithValue }) => {
    try {
      console.log('Fetching alarms from Redux thunk...');
      const response = await axios.get('http://127.0.0.1:8000/api/alarms/', {
        headers: {
          'Accept': 'application/json',
        },
      });
      console.log('Alarms fetched successfully:', response.data);
      return response.data;
    } catch (error) {
      console.error('Error in fetchAlarms thunk:', error);
      if (axios.isAxiosError(error)) {
        const errorMessage = error.response?.data?.error || error.response?.data?.details || error.message;
        return rejectWithValue(errorMessage);
      }
      return rejectWithValue('An unexpected error occurred while fetching alarms');
    }
  }
);

const alarmsSlice = createSlice({
  name: 'alarms',
  initialState,
  reducers: {
    clearAlarmsError: (state) => {
      state.error = null;
    },
  },
  extraReducers: (builder) => {
    builder
      .addCase(fetchAlarms.pending, (state) => {
        state.loading = true;
        state.error = null;
      })
      .addCase(fetchAlarms.fulfilled, (state, action) => {
        state.loading = false;
        state.alarms = action.payload;
        state.error = null;
      })
      .addCase(fetchAlarms.rejected, (state, action) => {
        state.loading = false;
        state.error = action.payload as string || 'Failed to fetch alarms';
      });
  },
});

export const { clearAlarmsError } = alarmsSlice.actions;
export default alarmsSlice.reducer; 