import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:seedina/provider/rtdb_handler.dart'; //
import 'package:seedina/utils/rewidgets/global/editingplant/presetparam.dart'; //
import 'package:seedina/utils/rewidgets/global/myappbar.dart'; //
import 'package:seedina/utils/rewidgets/global/editingplant/manualparam.dart'; //
import 'package:seedina/utils/style/gcolor.dart'; //

class EditPlants extends StatefulWidget {
  const EditPlants({super.key});

  @override
  State<EditPlants> createState() => _EditPlantsState();
}

class _EditPlantsState extends State<EditPlants> {
  String? _localSelectedPlantForDropdown;

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      final provider = Provider.of<HandlingProvider>(context, listen: false);

      // Gunakan draftSelectedPlantForEditing dari provider sebagai nilai awal untuk dropdown
      // Provider sudah memiliki logika fallback jika draft kosong atau active kosong.
      String initialDropdownValue = provider.draftSelectedPlantForEditing;

      // Jika draftSelectedPlantForEditing masih kosong setelah inisialisasi provider (jarang terjadi)
      // atau jika nilainya tidak valid (misal tidak ada di list plantsList),
      // coba ambil dari activeSelectedPlant atau fallback ke preset pertama.
      final plantsList = provider.parameters.keys.toList();
      if (initialDropdownValue.isEmpty || !plantsList.contains(initialDropdownValue)) {
          if (provider.activeSelectedPlant.isNotEmpty && plantsList.contains(provider.activeSelectedPlant)) {
              initialDropdownValue = provider.activeSelectedPlant;
          } else if (plantsList.isNotEmpty) {
              initialDropdownValue = plantsList.firstWhere((p) => p != "Kustom", orElse: () => plantsList.first);
          }
      }
      
      // PENTING: Panggil selectPlantForEditingPage agar draft di provider juga sinkron
      // dengan apa yang akan ditampilkan dropdown.
      // Ini menangani kasus di mana draft mungkin belum diset ke nilai yang valid
      // atau perlu disesuaikan (misal, dari Kustom aktif ke form Kustom).
      if (initialDropdownValue.isNotEmpty && provider.draftSelectedPlantForEditing != initialDropdownValue) {
          provider.selectPlantForEditingPage(initialDropdownValue);
      }
      
      // Update state lokal dropdown
      setState(() {
        _localSelectedPlantForDropdown = initialDropdownValue.isNotEmpty ? initialDropdownValue : (plantsList.isNotEmpty ? plantsList.first : null);
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Consumer<HandlingProvider>(
      builder: (context, provider, child) {
        final plantsList = provider.parameters.keys.toList();
        // _localSelectedPlantForDropdown sekarang di-update di initState atau saat onChanged
        // Kita bisa langsung menggunakan provider.draftSelectedPlantForEditing untuk value dropdown
        // karena provider yang akan menjadi "source of truth" untuk pilihan draft.
        // Namun, untuk menghindari rebuild loop, kita tetap pakai _localSelectedPlantForDropdown
        // dan hanya update dari provider.draftSelectedPlantForEditing jika ada perubahan signifikan.

        String? valueForDropdown = _localSelectedPlantForDropdown;

        // Jika nilai lokal tidak ada di daftar (misal setelah provider load dan mengubah list),
        // atau jika draft di provider berubah, sinkronkan.
        if ((valueForDropdown == null || !plantsList.contains(valueForDropdown)) && plantsList.isNotEmpty) {
            valueForDropdown = provider.draftSelectedPlantForEditing.isNotEmpty && plantsList.contains(provider.draftSelectedPlantForEditing)
                                ? provider.draftSelectedPlantForEditing
                                : plantsList.firstWhere((p) => p != "Kustom", orElse: () => plantsList.first);
            // Update state lokal di post frame callback untuk menghindari error build
            WidgetsBinding.instance.addPostFrameCallback((_) {
                if (mounted && _localSelectedPlantForDropdown != valueForDropdown) {
                    setState(() {
                        _localSelectedPlantForDropdown = valueForDropdown;
                    });
                    // Tidak perlu panggil provider.selectPlantForEditingPage di sini lagi
                    // karena sumber perubahan kemungkinan dari provider itu sendiri atau initState.
                }
            });
        }
         // Tambahan: Jika provider.draftSelectedPlantForEditing berubah (misal setelah simpan),
         // update _localSelectedPlantForDropdown
         if (provider.draftSelectedPlantForEditing != _localSelectedPlantForDropdown &&
             plantsList.contains(provider.draftSelectedPlantForEditing)) {
            WidgetsBinding.instance.addPostFrameCallback((_) {
                if (mounted) {
                    setState(() {
                        _localSelectedPlantForDropdown = provider.draftSelectedPlantForEditing;
                    });
                }
            });
         }


        return Scaffold(
          resizeToAvoidBottomInset: false,
          backgroundColor: Color(0XFF5B913B),
          appBar: CustomAppBar( //
              title: Text(
                'Edit Parameter Tanaman',
                style: TextStyle(
                    fontWeight: FontWeight.w900,
                    fontFamily: 'Quicksand',
                    color: GColors.myKuning), //
              ),
              actions: [],
              showBackButton: true),
          body: Column(
            children: [
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
                child: Container(
                    padding: EdgeInsets.symmetric(horizontal: 12, vertical: 4),
                    decoration: BoxDecoration(
                        color: Colors.white,
                        borderRadius: BorderRadius.circular(16)
                    ),
                    child: DropdownButtonFormField<String>(
                      value: valueForDropdown, // Gunakan _localSelectedPlantForDropdown
                      items: plantsList
                          .map((plant) => DropdownMenuItem(
                                value: plant,
                                child: Text(plant),
                              ))
                          .toList(),
                      onChanged: (newValue) {
                        if (newValue != null) {
                          setState(() {
                            _localSelectedPlantForDropdown = newValue; // Update state lokal
                          });
                          provider.selectPlantForEditingPage(newValue); // Beritahu provider
                        }
                      },
                      isExpanded: true,
                      icon: Icon(Icons.arrow_drop_down, color: GColors.myBiru,), //
                      decoration: InputDecoration(
                        labelText: 'Pilih Tanaman Anda',
                        labelStyle: TextStyle(color: GColors.myBiru.withOpacity(0.9)), //
                        border: InputBorder.none,
                      ),
                    ),
                ),
              ),
              SizedBox(height: 8),

              Expanded(
                child: Container(
                  width: MediaQuery.of(context).size.width,
                  decoration: BoxDecoration(
                    color: Colors.white,
                    borderRadius: BorderRadius.only(topLeft: Radius.circular(16), topRight: Radius.circular(16)),
                  ),
                  child: SingleChildScrollView(
                    child: Padding(
                      padding: EdgeInsets.only(left: 16, right: 16, top: 16, bottom: 16 + MediaQuery.of(context).viewInsets.bottom), 
                      child: Column(
                        children: [
                          if (provider.isLoading && _localSelectedPlantForDropdown == null)
                            Center(child: CircularProgressIndicator())
                          else if (_localSelectedPlantForDropdown == 'Kustom') // Bandingkan dengan state lokal
                            EditInfo() //
                          else if (_localSelectedPlantForDropdown != null && _localSelectedPlantForDropdown!.isNotEmpty)
                            PresetParameter() //
                          else
                            Center(child: Text("Pilih tanaman dari dropdown.", style: TextStyle(color: Colors.grey)))
                        ],
                      ),
                    ),
                  ),
                ),
              ),
            ],
          ),
        );
      },
    );
  }
}