import 'package:flutter/foundation.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:shared_preferences/shared_preferences.dart'; class AuthService extends ChangeNotifier { final FirebaseAuth _auth = FirebaseAuth.instance; User? _user; bool _isCommunityUnlocked = false; static const String _prefKeyUnlocked = 'community_unlocked'; static const String defaultCommunityCode = 'oggau'; User? get user => _user; bool get isAuthenticated => _user != null; bool get isCommunityUnlocked => _isCommunityUnlocked; AuthService() { _initAuth(); } Future _initAuth() async { final prefs = await SharedPreferences.getInstance(); _isCommunityUnlocked = prefs.getBool(_prefKeyUnlocked) ?? false; _auth.authStateChanges().listen((User? user) { _user = user; notifyListeners(); }); // Automatically ensure anonymous login if unlocked if (_user == null && _isCommunityUnlocked) { await signInAnonymously(); } } Future verifyCommunityCode(String enteredCode) async { final cleanCode = enteredCode.trim().toLowerCase(); // Accept default code 'oggau' or any custom community password if (cleanCode == defaultCommunityCode || cleanCode == 'oggau2024' || cleanCode == 'oggau7063') { _isCommunityUnlocked = true; final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_prefKeyUnlocked, true); await signInAnonymously(); notifyListeners(); return true; } return false; } Future lockCommunityAccess() async { _isCommunityUnlocked = false; final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_prefKeyUnlocked, false); await signOut(); notifyListeners(); } Future signInAnonymously() async { try { await _auth.signInAnonymously(); } catch (e) { if (kDebugMode) { debugPrint('Sign in anonymously error: $e'); } } } Future signOut() async { try { await _auth.signOut(); } catch (e) { if (kDebugMode) { debugPrint('Sign out error: $e'); } } } }