import { configureStore } from '@reduxjs/toolkit';
import TrainingDashboardSlice, { fetchTrainingOverview, fetchDepartmentTrainingReport, fetchBranchTrainingReport } from '../TrainingDashboardSlice';

jest.mock('@/services/api/api', () => ({ apiGet: jest.fn() }));
jest.mock('antd', () => ({ message: { success: jest.fn(), error: jest.fn(), warning: jest.fn() } }));
jest.mock('@/utilities/Helpers', () => ({
  __esModule: true, default: { handleServerError: jest.fn((e) => e?.message || 'Error') } }));

const createStore = () => configureStore({ reducer: { td: TrainingDashboardSlice.reducer } });

describe('TrainingDashboardSlice', () => {
  it('has correct initial state', () => {
    const store = createStore();
    const state = store.getState().td;
    expect(state.overview).toBeNull();
    expect(state.departmentReport).toBeNull();
    expect(state.branchReport).toBeNull();
    expect(state.loading).toBe(false);
    expect(state.error).toBeNull();
  });

  it('sets overview on fetchTrainingOverview.fulfilled', () => {
    const store = createStore();
    store.dispatch({ type: fetchTrainingOverview.fulfilled.type, payload: { totalSessions: 20 } });
    expect(store.getState().td.overview).toEqual({ totalSessions: 20 });
    expect(store.getState().td.loading).toBe(false);
  });

  it('sets departmentReport on fetchDepartmentTrainingReport.fulfilled', () => {
    const store = createStore();
    store.dispatch({ type: fetchDepartmentTrainingReport.fulfilled.type, payload: { name: 'IT' } });
    expect(store.getState().td.departmentReport).toEqual({ name: 'IT' });
  });

  it('sets branchReport on fetchBranchTrainingReport.fulfilled', () => {
    const store = createStore();
    store.dispatch({ type: fetchBranchTrainingReport.fulfilled.type, payload: { name: 'HQ' } });
    expect(store.getState().td.branchReport).toEqual({ name: 'HQ' });
  });
});
