import { createServerClient } from "@supabase/ssr";
import { createClient as createSupabaseClient } from "@supabase/supabase-js";
import { cookies } from "next/headers";

export async function createClient() {
  const cookieStore = await cookies();

  return createServerClient(
    process.env.NEXT_PUBLIC_SUPABASE_URL!,
    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
    {
      cookies: {
        getAll() {
          return cookieStore.getAll()
        },
        setAll(cookiesToSet) {
          try {
            cookiesToSet.forEach(({ name, value, options }) =>
              cookieStore.set(name, value, options)
            )
          } catch {
            // The `setAll` method was called from a Server Component.
            // This can be ignored if you have middleware refreshing
            // user sessions.
          }
        },
      },
    }
  )
}

export function createAdminClient() {
  const url = process.env.NEXT_PUBLIC_SUPABASE_URL;
  /* Sem fallback para NEXT_PUBLIC_*: aquele prefixo manda a variavel para o
     navegador, e a chave de servico ignora todo o RLS. Aceitar os dois nomes
     era o que mantinha o padrao errado vivo. */
  const serviceKey = process.env.SUPABASE_SERVICE_ROLE_KEY;

  if (!url || !serviceKey) {
    throw new Error("Supabase env vars are missing for admin client.");
  }

  // Trim the key to avoid issues with leading/trailing spaces
  const cleanKey = serviceKey.trim();

  return createSupabaseClient(url, cleanKey, {
    auth: { autoRefreshToken: false, persistSession: false },
  });
}
