import { useEffect } from 'react';

import { usePostHog } from 'posthog-js/react';
import { PostHogProvider } from 'posthog-js/react';

import useAuth from 'src/contexts/JWTContext';

const apiKey = import.meta.env.VITE_POSTHOG_API_KEY;
const apiHost = import.meta.env.VITE_POSTHOG_API_HOST;

const PostHogContent = ({ children }: { children: React.ReactNode }) => {
  const posthog = usePostHog();
  const { user, instance, isAuthenticated } = useAuth();

  useEffect(() => {
    if (isAuthenticated && user?.id) {
      posthog.identify(user.id.toString(), {
        email: user.email,
        language: user.language,
        instance_id: instance?.id,
        employee_internal_id: user.employeeInternalId,
      });
    } else {
      posthog.reset();
    }
  }, [posthog, user, instance, isAuthenticated]);

  return <>{children}</>;
};

export const PostHogConfigProvider = ({
  children,
}: {
  children: React.ReactNode;
}) => {
  if (!apiKey || !apiHost) {
    return <>{children}</>;
  }

  return (
    <PostHogProvider
      apiKey={apiKey}
      options={{
        api_host: apiHost,
        defaults: '2025-05-24',
        autocapture: false,
        capture_pageview: false,
        disable_session_recording: true,
      }}
    >
      <PostHogContent>{children}</PostHogContent>
    </PostHogProvider>
  );
};
