import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

import '../../../constant/colors.dart';
import '../../../constant/style.dart';
import '../../../controller/home/map_passenger_controller.dart';

// ---------------------------------------------------
// -- Widget for Start Point Search (Updated) --
// ---------------------------------------------------

GetBuilder<MapPassengerController> formSearchPlacesStart() {
  return GetBuilder<MapPassengerController>(
    id: 'start_point_form', // إضافة معرف لتحديث هذا الجزء فقط عند الحاجة
    builder: (controller) => Column(
      children: [
        Padding(
          padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
          child: Row(
            children: [
              // --- حقل البحث النصي ---
              Expanded(
                child: TextFormField(
                  controller: controller.placeStartController,
                  onChanged: (value) {
                    if (controller.placeStartController.text.length > 2) {
                      controller.getPlacesStart();
                    } else if (controller.placeStartController.text.isEmpty) {
                      controller.clearPlacesStart();
                    }
                  },
                  decoration: InputDecoration(
                    hintText: 'Search for a starting point'.tr,
                    hintStyle:
                        AppStyle.subtitle.copyWith(color: Colors.grey[600]),
                    prefixIcon:
                        const Icon(Icons.search, color: AppColor.primaryColor),
                    suffixIcon: controller.placeStartController.text.isNotEmpty
                        ? IconButton(
                            icon: Icon(Icons.clear, color: Colors.grey[400]),
                            onPressed: () {
                              controller.placeStartController.clear();
                              controller.clearPlacesStart();
                            },
                          )
                        : null,
                    contentPadding: const EdgeInsets.symmetric(
                        horizontal: 16.0, vertical: 10.0),
                    border: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(8.0),
                      borderSide: BorderSide.none,
                    ),
                    focusedBorder: OutlineInputBorder(
                      borderRadius: BorderRadius.circular(8.0),
                      borderSide: BorderSide(color: AppColor.primaryColor),
                    ),
                    filled: true,
                    fillColor: Colors.grey[50],
                  ),
                ),
              ),

              const SizedBox(width: 8.0),

              // --- أيقونة اختيار الموقع من الخريطة (الجزء المضاف) ---
              IconButton(
                onPressed: () {
                  // هذا السطر مهم جداً: نخبر الكونترولر أننا نحدد نقطة البداية الآن
                  controller.passengerStartLocationFromMap = true;

                  // إخفاء القائمة السفلية وفتح مؤشر الخريطة (Picker)
                  controller.changeMainBottomMenuMap();
                  controller.changePickerShown();
                },
                icon: Icon(Icons.location_on_outlined,
                    color: AppColor.accentColor, size: 30),
                tooltip: 'Pick start point on map'.tr,
              ),
            ],
          ),
        ),

        // --- قائمة نتائج البحث ---
        AnimatedContainer(
          duration: const Duration(milliseconds: 200),
          height: controller.placesStart.isNotEmpty ? 300 : 0,
          decoration: BoxDecoration(
            color: Colors.white,
            borderRadius: BorderRadius.circular(8.0),
          ),
          margin: const EdgeInsets.symmetric(horizontal: 16.0),
          child: ListView.separated(
            shrinkWrap: true,
            physics: const ClampingScrollPhysics(),
            itemCount: controller.placesStart.length,
            separatorBuilder: (context, index) =>
                const Divider(height: 1, color: Colors.grey),
            itemBuilder: (BuildContext context, int index) {
              var res = controller.placesStart[index];
              var title = res['name_ar'] ?? res['name'] ?? 'Unknown Place';
              var address = res['address'] ?? 'Details not available';

              return ListTile(
                leading: const Icon(Icons.place, size: 30, color: Colors.grey),
                title: Text(title,
                    style: AppStyle.subtitle
                        .copyWith(fontWeight: FontWeight.w500)),
                subtitle: Text(address,
                    style: TextStyle(color: Colors.grey[600], fontSize: 12)),
                onTap: () {
                  var latitude = res['latitude'];
                  var longitude = res['longitude'];
                  if (latitude != null && longitude != null) {
                    // تحديث موقع الراكب (نقطة الانطلاق) بناءً على الاختيار
                    controller.passengerLocation =
                        LatLng(double.parse(latitude), double.parse(longitude));

                    // تحديث النص في الحقل
                    controller.placeStartController.text = title;

                    // مسح النتائج
                    controller.clearPlacesStart();

                    // إغلاق القائمة والعودة للخريطة لرؤية النتيجة (اختياري حسب منطق تطبيقك)
                    controller.changeMainBottomMenuMap();

                    controller.update();
                  }
                },
              );
            },
          ),
        ),
      ],
    ),
  );
}
