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

// Permission interface based on your API response
export interface Permission {
  id: number;
  permission_key: string;
  label: string;
  description: string;
}

// Grouped permissions interface
export interface GroupedPermissions {
  [groupKey: string]: Permission[];
}

export interface AuthState {
  accessToken: string | null;
  refreshToken: string | null;
  isAuthenticated?: boolean;
  user: any | null;
  permissions: GroupedPermissions;
}

// Initial state
const initialState: AuthState = {
  accessToken: null,
  refreshToken: null,
  isAuthenticated: false,
  user: null,
  permissions: {},
};

// Create the auth slice
export const authSlice = createSlice({
  name: "auth",
  initialState,
  reducers: {
    saveUserDetails: (state, action: PayloadAction<AuthState>) => {
      state.accessToken = action.payload.accessToken;
      state.refreshToken = action.payload.refreshToken;
      state.isAuthenticated = true;
      state.user = action.payload.user;
      state.permissions = action.payload.permissions || {};
    },
    logout: (state) => {
      state.accessToken = null;
      state.refreshToken = null;
      state.isAuthenticated = false;
      state.user = null;
      state.permissions = {};
    },
    updatePermissions: (state, action: PayloadAction<GroupedPermissions>) => {
      state.permissions = action.payload;
    },
  },
});

// Export actions
export const { saveUserDetails, logout, updatePermissions } = authSlice.actions;

// Export reducer
export default authSlice.reducer;
