"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(() => {
    const INACTIVITY_LIMIT = 5 * 60 * 1000; // 5 Minuten in ms

    const updateActivity = () => {
      localStorage.setItem("last_activity", Date.now().toString());
    };

    // Events zum Tracken der Benutzerinteraktion
    const events = ["mousemove", "keydown", "mousedown", "touchstart", "scroll", "click"];
    events.forEach((event) => window.addEventListener(event, updateActivity));

    // Aktivitätszeitstempel beim Mounten initialisieren
    updateActivity();

    // Regelmäßige Überprüfung der Inaktivitä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 || !user) {
        try {
          await signOut();
        } catch (e) {
          console.error("Fehler beim Inactivity-Server-Signout:", e);
        }
        await supabase.auth.signOut();
        localStorage.removeItem("last_activity");
        router.push("/");
        router.refresh();
        return;
      }

      const lastActivity = Number(localStorage.getItem("last_activity") || Date.now());
      if (Date.now() - lastActivity > INACTIVITY_LIMIT) {
        // Bei Überschreitung abmelden
        try {
          await signOut();
        } catch (e) {
          console.error("Fehler beim Inactivity-Server-Signout:", e);
        }
        await supabase.auth.signOut();
        localStorage.removeItem("last_activity");
        router.push("/");
        router.refresh();
      }
    }, 5000); // Prüfung alle 5 Sekunden

    return () => {
      events.forEach((event) => window.removeEventListener(event, updateActivity));
      clearInterval(interval);
    };
  }, [supabase, router]);

  return null;
}
