import 'package:supabase_flutter/supabase_flutter.dart'; import '../constants/app_constants.dart'; class SupabaseService { static SupabaseClient get _supabase => Supabase.instance.client; // Initialize Supabase static Future initialize() async { try { print('DEBUG: Inicializando Supabase...'); await Supabase.initialize( url: AppConstants.supabaseUrl, anonKey: AppConstants.supabaseAnonKey, ); print('DEBUG: Supabase inicializado com sucesso!'); } catch (e) { print('DEBUG: Erro ao inicializar Supabase: $e'); rethrow; } } // Get current user static User? get currentUser => _supabase.auth.currentUser; // Sign up with email and password static Future signUp({ required String email, required String password, required String name, }) async { try { final response = await _supabase.auth.signUp( email: email, password: password, data: {'name': name}, ); if (response.user != null) { return response; } else { throw Exception('Falha ao criar usuário.'); } } catch (e) { throw Exception('Erro ao criar conta: $e'); } } // Sign in with email and password static Future signIn({ required String email, required String password, }) async { try { return await _supabase.auth.signInWithPassword( email: email, password: password, ); } catch (e) { throw Exception('Erro ao fazer login: $e'); } } // Sign out static Future signOut() async { try { await _supabase.auth.signOut(); } catch (e) { throw Exception('Erro ao sair: $e'); } } // Reset password static Future resetPassword(String email) async { try { await _supabase.auth.resetPasswordForEmail(email); } catch (e) { throw Exception('Erro ao redefinir senha: $e'); } } // Update user profile static Future updateProfile({String? name, String? email}) async { try { final updates = {}; if (name != null) updates['name'] = name; final userAttributes = UserAttributes( data: updates.isNotEmpty ? updates : null, email: email, ); await _supabase.auth.updateUser(userAttributes); } catch (e) { throw Exception('Erro ao atualizar perfil: $e'); } } // Test connection to Supabase static Future testConnection() async { try { final session = _supabase.auth.currentSession; return true; } catch (e) { return false; } } // Listen to auth state changes static Stream get authStateChanges => _supabase.auth.onAuthStateChange; }