// composables/useAdminAuth.ts
//
// Admin-Auth-Composable.
//
// Auth-Architektur:
//   1. User loggt sich via Supabase (Email/Password) ein -- normaler Supabase-JWT.
//   2. Nach Login: Backend-Aufruf gegen GET /api/admin/verify-admin (Phase 3).
//      Das Backend prueft ob die Supabase-User-ID in der admin_users-Tabelle steht.
//      Bei Fehlschlag: sofort ausloggen (kein einfacher User darf rein).
//   3. Admin-Status wird in useSupabaseUser() gehalten -- kein extra State noetig.
//
// Phase 3 TODO: Backend muss /api/admin/verify-admin implementieren mit requireAdmin-Middleware.
//
// DSGVO-Note: Admin-Logins werden server-side in audit_log geloggt (Phase 4 -- hans-mueller).

export function useAdminAuth() {
  const supabase = useSupabaseClient()
  const user = useSupabaseUser()
  const config = useRuntimeConfig()

  // Computed E-Mail fuer Topbar-Anzeige
  const adminEmail = computed(() => user.value?.email ?? "")

  // Login via Supabase Email/Password
  async function loginWithPassword(email: string, password: string) {
    const { error } = await supabase.auth.signInWithPassword({ email, password })
    if (error) throw new Error(error.message)

    // Phase 3: Admin-Verifikation gegen Backend.
    // Aktuell nur Supabase-Login -- requireAdmin-Check kommt in Phase 3.
    // TODO: await verifyAdminRole()
  }

  // Logout -- Supabase-Session beenden, zurueck zu /login
  async function logout() {
    await supabase.auth.signOut()
    await navigateTo("/login")
  }

  // Phase 3: Backend-Check ob Supabase-User in admin_users-Tabelle steht.
  // Wirft Error wenn nicht -- Caller soll dann logout() aufrufen.
  async function verifyAdminRole() {
    const session = await supabase.auth.getSession()
    const token = session.data.session?.access_token
    if (!token) throw new Error("Keine aktive Session")

    const res = await $fetch(`${config.public.apiBase}/api/admin/verify-admin`, {
      method: "GET",
      headers: { Authorization: `Bearer ${token}` },
    })

    // Backend gibt { isAdmin: true } zurueck -- alles andere ist Zugriffsverweigerung.
    if (!(res as { isAdmin: boolean }).isAdmin) {
      await supabase.auth.signOut()
      throw new Error("Kein Admin-Zugriff")
    }
  }

  return {
    user,
    adminEmail,
    loginWithPassword,
    logout,
    verifyAdminRole,
  }
}
