"use client";

import { useFlagsStatus, useVariant } from "@unleash/proxy-client-react";
import { useMemo } from "react";

interface UseUnleashProps {
  flag: string;
}

/**
 * Hook для получения варианта Unleash feature flag
 * Возвращает имя варианта или undefined если флаг не активен
 * 
 * ВАЖНО: Не отправляет impression автоматически!
 * Используйте sendUnleashImpression() в FunnelRuntime когда экран виден
 */
export function useUnleash({ flag }: UseUnleashProps) {
  const { flagsReady } = useFlagsStatus();
  const variant = useVariant(flag);

  const isReady = useMemo(() => {
    return flagsReady ?? true;
  }, [flagsReady]);

  const variantName = useMemo(() => {
    return variant?.name;
  }, [variant]);

  return {
    isReady,
    variant: variantName,
    payload: variant?.payload,
  };
}

/**
 * Проверяет соответствует ли текущий вариант ожидаемым значениям
 */
export function checkUnleashVariant(
  currentVariant: string | undefined,
  expectedVariants: string[],
  operator: "includesAny" | "includesAll" | "includesExactly" | "equals" = "includesAny"
): boolean {
  if (!currentVariant || expectedVariants.length === 0) {
    return false;
  }

  switch (operator) {
    case "includesAny":
      return expectedVariants.includes(currentVariant);
    
    case "includesAll":
      // Для одного варианта "все" означает что он должен быть в списке
      return expectedVariants.includes(currentVariant);
    
    case "includesExactly":
      // Проверяем что есть ровно один вариант и он совпадает
      return expectedVariants.length === 1 && expectedVariants[0] === currentVariant;
    
    case "equals":
      // Точное совпадение с первым вариантом
      return expectedVariants.length === 1 && expectedVariants[0] === currentVariant;
    
    default:
      return false;
  }
}
