'use client';

import { ReactNode } from 'react';
import { useCapability } from '@/hooks/useCapability';
import { useInject } from '@/lib/di/hooks/useInject';
import { POLICY_SERVICE_TOKEN } from '@/lib/di/tokens';

type CapabilityGateProps = {
  capabilityKey: string;
  children: ReactNode;
  fallback?: ReactNode;
  comingSoon?: ReactNode;
};

export function CapabilityGate({
  capabilityKey,
  children,
  fallback = null,
  comingSoon = null,
}: CapabilityGateProps) {
  const policyService = useInject(POLICY_SERVICE_TOKEN);
  const { isLoading, isError, data: snapshot } = useCapability(capabilityKey);

  // Use PolicyService to centralize the evaluation logic
  const content = policyService.getCapabilityContent(
    snapshot || null,
    capabilityKey,
    isLoading,
    isError,
    children,
    fallback,
    comingSoon
  );

  return <>{content}</>;
}