/* eslint-disable react/destructuring-assignment */
import axios from 'axios';
import type { ReactNode } from 'react';
import type React from 'react';
import { createContext, useState } from 'react';
import { useNavigate } from 'react-router-dom';

import environment from '../../Environments/environment';
import type { CompanyTypeInterface } from '../../Pages/ChooseCompanyType/companyTypeHelper';
import companyDropdownPredefinedValues from '../../Pages/Companies/Companies.helper';
import type { AccountContextModel } from './AccountContextModel';

export const AccountContext: React.Context<AccountContextModel> =
	createContext<AccountContextModel>({
		companyType: '',
		plan: '',
		companyTypeHandler: () => {},
		companyPlanHandler: () => {}
	});

const AccountContextProvider: React.FC<{ children: ReactNode }> = (props: {
	children: ReactNode;
}) => {
	// eslint-disable-next-line @typescript-eslint/no-unused-vars
	const [companyType, setCompanyType] = useState<string>('Single Company');
	const [plan, setPlan] = useState<string>('Basic Plan');
	const { frontendRoutes, apiUrl, backendRoutes } = environment;
	const navigate = useNavigate();
	// const globalContext: GlobalStateModel = useContext(GlobalStateContext);

	function companyTypeHandler(user: CompanyTypeInterface) {
		const industryValue = companyDropdownPredefinedValues.industry.find(
			(id) => user.industryId === id.value
		);
		const userForSend = {
			...user,
			industryId: industryValue?.id
		};
		localStorage.setItem('userInfo', JSON.stringify(userForSend));
		axios
			.post(apiUrl + backendRoutes.userAndCompanyRegistration, {
				userAndCompanyInfo: userForSend
			})
			.then((result) => console.log(result.data))
			.catch((error) => console.log(error.message));
		navigate(frontendRoutes.manageSubscription);
	}

	function companyPlanHandler(event: string) {
		setPlan(event);
	}

	// eslint-disable-next-line react/jsx-no-constructed-context-values
	const contextValue: AccountContextModel = {
		companyType,
		plan,
		companyTypeHandler,
		companyPlanHandler
	};

	return <AccountContext.Provider value={contextValue}>{props.children}</AccountContext.Provider>;
};

export default AccountContextProvider;
