import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:seedina/login_page/setup/esp_conn_setup.dart'; import 'package:seedina/login_page/setup/seedkey_step.dart'; import 'package:seedina/login_page/setup/selection_plant_step.dart'; import 'package:seedina/services/auth_service.dart'; import 'package:seedina/main_page/portalscreen.dart'; import 'package:flutter/foundation.dart'; enum Destination { loading, seedKeySetup, plantSetup, espSetup, portal } class SetupCheckWrapper extends StatefulWidget { final User user; const SetupCheckWrapper({super.key, required this.user}); @override State createState() => _SetupCheckWrapperState(); } class _SetupCheckWrapperState extends State { Destination _destination = Destination.loading; // State awal @override void initState() { super.initState(); _determineDestination(); // Mulai proses penentuan tujuan } Future _determineDestination() async { Destination determinedDestination; try { DocumentSnapshot? userDocSnap = await AuthService.getUserDoc(widget.user.uid); if (userDocSnap != null && userDocSnap.exists && userDocSnap.data() != null) { final userData = userDocSnap.data() as Map; final bool setupComplete = userData['setupComplete'] ?? false; final String? seedKey = userData['seedKey']; final String? selectedPlant = userData['selectedPlant']; if (kDebugMode) { print("[SetupCheckWrapper] Firesstore dataL UID=${widget.user.uid}, setupComplete=$setupComplete, seedKey=$seedKey"); } if (setupComplete) { determinedDestination = Destination.portal; } else { if (seedKey == null || seedKey.isEmpty) { determinedDestination = Destination.seedKeySetup; } else if (selectedPlant == null || selectedPlant.isEmpty) { determinedDestination = Destination.plantSetup; } else { determinedDestination = Destination.espSetup; } } } else { if (kDebugMode) { print("[SetupCheckWrapper] Document not found"); } await FirebaseFirestore.instance.collection('users').doc(widget.user.uid).set({ 'uid': widget.user.uid, 'email': widget.user.email, 'displayName': widget.user.displayName?? 'Farms', 'createdAt': Timestamp.now(), 'setupComplete': false, 'seedKey': null, 'selectedPlant': null }, SetOptions(merge: true)); determinedDestination = Destination.seedKeySetup; } } catch (e) { if (kDebugMode) { print("[SetupCheckWrapper] Error when locating destination: $e"); } determinedDestination = Destination.seedKeySetup; } if (mounted) { setState(() { _destination = determinedDestination; }); } } @override Widget build(BuildContext context) { switch (_destination) { case Destination.loading: return const Scaffold(body: Center(child: CircularProgressIndicator())); case Destination.seedKeySetup: if (kDebugMode) { print("[Build] Destination decided: seedKey"); } return SeedKey(); case Destination.plantSetup: return SetupPlant(); case Destination.espSetup: return WiFiConnSetup(); case Destination.portal: // Jika tujuan adalah portal utama if (kDebugMode) { print("[Build] Destination decided: PortalScreen"); } return const PortalScreen(); } } }