import React, { createContext, useContext } from 'react';
import type { Dispatch, PropsWithChildren, SetStateAction } from 'react';

export interface SidecarActivityContextValue {
    isDeletingEntity: boolean;
    isSavingFormData: boolean;
    setIsDeletingEntity: (isDeleting: boolean) => void;
    deleteError: string | null;
    setDeleteError: Dispatch<SetStateAction<string | null>>;
}

const SidecarActivityContext = createContext<
    SidecarActivityContextValue | undefined
>(undefined);

export const SidecarActivityProvider: React.FC<
    PropsWithChildren<SidecarActivityContextValue>
> = ({ children, ...value }) => (
    <SidecarActivityContext.Provider value={value}>
        {children}
    </SidecarActivityContext.Provider>
);

export const useSidecarActivity = (): SidecarActivityContextValue => {
    const context = useContext(SidecarActivityContext);
    if (!context) {
        throw new Error(
            'useSidecarActivity must be used within a SidecarActivityProvider'
        );
    }
    return context;
};

export default SidecarActivityContext;
