import { useEffect, useState } from 'react';
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
import { useExtensionCheckMutation } from '@/entities/additional-service/api/use-extension-check-mutation';
import { Dialog } from '@/shared/ui/dialogs/dialog';
import { PATHS } from '@/shared/constants/paths';
import { useTranslation } from 'react-i18next';

interface UseExtensionAccessCheckProps {
  extensionCode: string;
  enabled?: boolean;
}

interface UseExtensionAccessCheckReturn {
  hasAccess: boolean | null;
  AccessDeniedDialog: () => React.ReactElement | null;
}

/**
 * 부가서비스 접근 권한을 체크하는 훅
 * 페이지 마운트 시 extensionCheck API를 호출하여 권한을 확인하고,
 * 권한이 없으면 다이얼로그를 표시한 후 이전 페이지로 이동합니다.
 */
export const useExtensionAccessCheck = ({
  extensionCode,
  enabled = true
}: UseExtensionAccessCheckProps): UseExtensionAccessCheckReturn => {
  const { navigate } = useNavigate();
  const { t } = useTranslation();
  const { mutateAsync: extensionCheck } = useExtensionCheckMutation();

  const [hasAccess, setHasAccess] = useState<boolean | null>(null);
  const [isChecking, setIsChecking] = useState<boolean>(true);
  const [dialogOpen, setDialogOpen] = useState<boolean>(false);

  useEffect(() => {
    if (!enabled) {
      setIsChecking(false);
      setHasAccess(true);
      return;
    }

    const checkAccess = async () => {
      try {
        setIsChecking(true);
        const result = await extensionCheck({ extensionCode });

        if (result.checkResult === true) {
          // 권한 체크 통과
          setHasAccess(true);
        } else {
          // 권한 체크 실패 - 다이얼로그 표시
          setHasAccess(false);
          setDialogOpen(true);
        }
      } catch (error) {
        console.error('Extension access check error:', error);
        // 에러 발생 시에도 다이얼로그 표시
        setHasAccess(false);
        setDialogOpen(true);
      } finally {
        setIsChecking(false);
      }
    };

    checkAccess();
  }, [extensionCode, enabled]);

  const handleConfirm = () => {

    setDialogOpen(false);

    setTimeout(() => {
      navigate(PATHS.additionalService.list);
    }, 0);
  };

  const AccessDeniedDialog = () => {
    return (
      <Dialog
        open={dialogOpen}
        onClose={() => { }}
        message={
          <>
            {t('additionalService.notActiveServiceMessage')}<br />
            {t('additionalService.contactSalesMessage')}
          </>
        }
        buttonLabel={['확인']}
        onConfirmClick={handleConfirm}
        afterLeave={() => { }}
      />
    );
  };

  return {
    hasAccess,
    AccessDeniedDialog,
  };
};
