import React, { createContext, useContext, ReactNode } from 'react';
import { NeuraSDK } from '../core/neura-sdk';
import { NeuraSDKConfig } from '../types';

interface NeuraContextType {
  sdk: NeuraSDK;
}

const NeuraContext = createContext<NeuraContextType | undefined>(undefined);

interface NeuraProviderProps {
  config: NeuraSDKConfig;
  children: ReactNode;
}

export const NeuraProvider: React.FC<NeuraProviderProps> = ({ config, children }) => {
  // Create the SDK instance
  const sdk = React.useMemo(() => new NeuraSDK(config), [config]);
  
  const value = React.useMemo(() => ({ sdk }), [sdk]);
  
  return <NeuraContext.Provider value={value}>{children}</NeuraContext.Provider>;
};

export const useNeura = (): NeuraContextType => {
  const context = useContext(NeuraContext);
  
  if (context === undefined) {
    throw new Error('useNeura must be used within a NeuraProvider');
  }
  
  return context;
};