"use client";

import { LazyMotion, MotionConfig, domAnimation } from "framer-motion";
import { QueryProvider } from "@/components/QueryProvider";
import { I18nProvider } from "@/hooks/useTranslation";
import { ThemeProvider } from "@/hooks/useTheme";
import { AuthProvider } from "@/hooks/useAuth";
import { AgentAuthProvider } from "@/hooks/useAgentAuth";
import { RecipientsProvider } from "@/hooks/useRecipients";
import { TransactionsProvider } from "@/hooks/useTransactions";
import { NotificationsProvider } from "@/hooks/useNotifications";
import { ToastBridge } from "@/components/common/Toast";
import { CookieBanner } from "@/components/common/CookieBanner";

export function Providers({ children }: { children: React.ReactNode }) {
  return (
    <LazyMotion features={domAnimation} strict>
      <MotionConfig reducedMotion="user">
        <ThemeProvider>
          <QueryProvider>
            <I18nProvider>
              <AgentAuthProvider>
                <AuthProvider>
                  <RecipientsProvider>
                    <TransactionsProvider>
                      <NotificationsProvider>
                        <ToastBridge />
                        {children}
                        <CookieBanner />
                      </NotificationsProvider>
                    </TransactionsProvider>
                  </RecipientsProvider>
                </AuthProvider>
              </AgentAuthProvider>
            </I18nProvider>
          </QueryProvider>
        </ThemeProvider>
      </MotionConfig>
    </LazyMotion>
  );
}
