"use client";

import { useEffect } from "react";
import { createBrowserClient } from "@supabase/ssr";
import { useRouter } from "next/navigation";
import { signOut } from "@/lib/actions/auth";
import { resolveSupabaseUrl } from "@/lib/utils";

export function InactivityTracker() {
  const router = useRouter();

  // Supabase URL & Anon Key auslesen (für Browser-Client)
  const supabaseUrl = process.env.SUPABASE_URL || process.env.NEXT_PUBLIC_SUPABASE_URL;
  const supabaseAnonKey = process.env.SUPABASE_ANON_KEY || process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY;

  // Browser Client inline erstellen
  const supabase = createBrowserClient(
    resolveSupabaseUrl(supabaseUrl)!,
    supabaseAnonKey!,
    {
      cookieOptions: {
        name: "webshop-auth-token",
      },
    }
  );

  useEffect(() => {
    // Regelmäßige Überprüfung der Session-Gültigkeit (z.B. wegen Login auf anderem Browser/Gerät)
    const interval = setInterval(async () => {
      const { data: { session } } = await supabase.auth.getSession();
      if (!session) return; // Nicht eingeloggt, keine Prüfung nötig

      // Prüfen, ob die Session auf dem Server noch gültig ist (z.B. wegen Login auf anderem Browser)
      const { data: { user }, error } = await supabase.auth.getUser();
      if (error) {
        // Nur bei echten Auth-Fehlern (z.B. ungültiges Token / Session gelöscht) abmelden.
        // Netzwerkfehler wie "Failed to fetch" haben keinen HTTP-Status (error.status ist undefined).
        const isAuthError = error.status === 400 || error.status === 401 || error.status === 403;
        if (isAuthError) {
          try {
            await signOut();
          } catch (e) {
            console.error("Fehler beim Server-Signout nach Session-Verlust:", e);
          }
          await supabase.auth.signOut();
          router.push("/auth/login?message=concurrent");
          router.refresh();
        }
      } else if (!user) {
        // Keine Fehlermeldung, aber auch kein User-Objekt (Sitzung abgelaufen/gelöscht)
        try {
          await signOut();
        } catch (e) {
          console.error("Fehler beim Server-Signout nach Session-Verlust:", e);
        }
        await supabase.auth.signOut();
        router.push("/auth/login?message=concurrent");
        router.refresh();
      }
    }, 5000); // Prüfung alle 5 Sekunden

    return () => {
      clearInterval(interval);
    };
  }, [supabase, router]);

  return null;
}
