/* eslint no-param-reassign: "error" */
import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';
import type { AxiosResponse } from 'axios';
import axios from 'axios';

import environment from '../../Environments/environment';
import type { PlanModel } from '../../Store/User/user-context.helper';

const { apiUrl, backendRoutes } = environment;

interface ApplicationGlobalState {
	availablePlans: PlanModel[] | null;
}

const initialState: ApplicationGlobalState = {
	availablePlans: null
};

const applicationSlice = createSlice({
	name: 'applicationGlobal',
	initialState,
	reducers: {
		// selectCompany: (state, action) => {
		// 	state.availablePlans = action.payload;
		// }
	},
	extraReducers: (builder) => {
		builder
			.addCase(fetchAvailablePlans.pending, (state, action) => {
				state.availablePlans = null;
			})
			.addCase(fetchAvailablePlans.fulfilled, (state, action) => {
				if (action.payload) {
					state.availablePlans = action.payload;
				}
			});
	}
});

export const fetchAvailablePlans = createAsyncThunk(
	'companies/fetchAvailablePlansList',
	async () => {
		console.log('fetching available plans');
		// fetch available plans list
		const availablePlans = axios
			.get(`${apiUrl}/plans/get-available-plans`)
			.then((response: AxiosResponse<PlanModel[]>) => response.data)
			.catch((error) => {
				console.error(error.message);
				return null;
			});
		return availablePlans;
	}
);

// export const { selectCompany } = applicationSlice.actions;

export default applicationSlice.reducer;
