import 'package:sefer_driver/views/widgets/mydialoug.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sefer_driver/constant/colors.dart';
import 'package:sefer_driver/constant/info.dart';
import 'package:sefer_driver/controller/firebase/firbase_messge.dart';
import 'package:sefer_driver/controller/home/captin/map_driver_controller.dart';
import 'package:sefer_driver/views/widgets/elevated_btn.dart';

import '../../../../constant/box_name.dart';
import '../../../../constant/style.dart';
import '../../../../main.dart';

// Changed: إعادة تصميم كاملة لتصبح شريط معلومات علوي مدمج
class PassengerInfoWindow extends StatelessWidget {
  const PassengerInfoWindow({super.key});

  @override
  Widget build(BuildContext context) {
    return GetBuilder<MapDriverController>(
      builder: (controller) => AnimatedPositioned(
        duration: const Duration(milliseconds: 400),
        curve: Curves.easeInOut,
        // Changed: تم تغيير الموضع من الأسفل إلى الأعلى
        top: controller.isPassengerInfoWindow ? 15.0 : -200.0,
        left: 15.0,
        right: 15.0,
        child: Card(
          elevation: 8,
          shadowColor: Colors.black.withOpacity(0.3),
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(16),
          ),
          child: Padding(
            padding:
                const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0),
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                // New: صف علوي للمعلومات الأساسية
                _buildTopInfoRow(controller),
                const Divider(height: 16),

                // Changed: الأزرار الآن في صف أفقي ومدمج
                if (!controller.isRideBegin) _buildActionButtons(controller),

                // New: مؤشر انتظار الراكب المدمج
                if (controller.remainingTimeInPassengerLocatioWait < 300 &&
                    controller.remainingTimeInPassengerLocatioWait != 0 &&
                    !controller.isRideBegin) ...[
                  const SizedBox(height: 10),
                  _buildWaitingIndicator(controller),
                ],

                // زر الإلغاء بعد انتهاء وقت الانتظار
                if (controller.isdriverWaitTimeEnd &&
                    !controller.isRideBegin) ...[
                  const SizedBox(height: 10),
                  _buildCancelAfterWaitButton(controller),
                ]
              ],
            ),
          ),
        ),
      ),
    );
  }

  // New: ودجت لعرض المعلومات العلوية بشكل مدمج
  Widget _buildTopInfoRow(MapDriverController controller) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        // معلومات الراكب
        Expanded(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text(
                'Go to passenger:'.tr,
                style: AppStyle.title
                    .copyWith(color: Colors.grey[600], fontSize: 13),
              ),
              Text(
                controller.passengerName,
                style: AppStyle.title
                    .copyWith(fontWeight: FontWeight.bold, fontSize: 18),
                overflow: TextOverflow.ellipsis,
              ),
            ],
          ),
        ),
        // معلومات المسافة والزمن
        Row(
          children: [
            _buildInfoChip(Icons.map_outlined, '${controller.distance} km'),
            const SizedBox(width: 8),
            _buildInfoChip(
              Icons.timer_outlined,
              controller.hours > 1
                  ? '${controller.hours}h ${controller.minutes}m'
                  : '${controller.minutes}m',
            ),
          ],
        ),
      ],
    );
  }

  // New: ودجت مخصص لعرض المعلومات بشكل أنيق
  Widget _buildInfoChip(IconData icon, String text) {
    return Container(
      padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
      decoration: BoxDecoration(
        color: AppColor.primaryColor.withOpacity(0.1),
        borderRadius: BorderRadius.circular(20),
      ),
      child: Row(
        mainAxisSize: MainAxisSize.min,
        children: [
          Icon(icon, color: AppColor.primaryColor, size: 16),
          const SizedBox(width: 4),
          Text(text,
              style: TextStyle(
                  color: AppColor.primaryColor, fontWeight: FontWeight.bold)),
        ],
      ),
    );
  }

  // Changed: إعادة تصميم أزرار الإجراءات لتكون أكثر دمجًا
  Widget _buildActionButtons(MapDriverController controller) {
    return Row(
      children: [
        if (controller.isArrivedSend)
          Expanded(
            child: ElevatedButton.icon(
              icon: const Icon(Icons.location_on, size: 18),
              label: Text('I Arrive'.tr),
              style: ElevatedButton.styleFrom(
                backgroundColor: AppColor.yellowColor,
                foregroundColor: Colors.black,
                shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(10)),
              ),
              onPressed: () async {
                controller.getRoute(
                    origin: controller.latLngPassengerLocation,
                    destination: controller.latLngPassengerDestination,
                    routeColor: Colors.blue // أو أي لون
                    );
                if (await controller
                        .calculateDistanceBetweenDriverAndPassengerLocation() <
                    140) {
                  Get.find<FirebaseMessagesController>()
                      .sendNotificationToDriverMAP(
                    'Hi ,I Arrive your site',
                    'I Arrive at your site'.tr,
                    controller.tokenPassenger,
                    [],
                    'ding.wav',
                  );
                  controller.startTimerToShowDriverWaitPassengerDuration();
                  controller.isArrivedSend = false;
                } else {
                  MyDialog().getDialog(
                      'You are not near the passenger location'.tr,
                      'Please go to the pickup location exactly'.tr,
                      () => Get.back());
                }
              },
            ),
          ),
        if (controller.isArrivedSend) const SizedBox(width: 8),
        Expanded(
          flex: 2,
          child: ElevatedButton.icon(
            icon: const Icon(Icons.play_arrow_rounded, size: 20),
            label: Text('Start the Ride'.tr,
                style: const TextStyle(fontWeight: FontWeight.bold)),
            style: ElevatedButton.styleFrom(
              backgroundColor: AppColor.greenColor,
              foregroundColor: Colors.white,
              shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(10)),
            ),
            onPressed: () {
              MyDialog().getDialog(
                "Is the Passenger in your Car?".tr,
                "Don't start trip if passenger not in your car".tr,
                () async {
                  await controller.startRideFromDriver();
                  Get.back();
                },
              );
            },
          ),
        ),
      ],
    );
  }

  // Changed: مؤشر الانتظار الآن أكثر دمجًا
  Widget _buildWaitingIndicator(MapDriverController controller) {
    return ClipRRect(
      borderRadius: BorderRadius.circular(10),
      child: Stack(
        alignment: Alignment.center,
        children: [
          LinearProgressIndicator(
            backgroundColor: AppColor.greyColor.withOpacity(0.3),
            color: controller.remainingTimeInPassengerLocatioWait < 60
                ? AppColor.redColor
                : AppColor.greenColor,
            minHeight: 25,
            value: controller.progressInPassengerLocationFromDriver.toDouble(),
          ),
          Text(
            controller.stringRemainingTimeWaitingPassenger,
            style: AppStyle.title.copyWith(
                color: Colors.white,
                fontWeight: FontWeight.bold,
                fontSize: 13,
                shadows: [
                  Shadow(color: Colors.black.withOpacity(0.5), blurRadius: 2)
                ]),
          ),
        ],
      ),
    );
  }

  // New: زر الإلغاء بعد انتهاء الانتظار
  Widget _buildCancelAfterWaitButton(MapDriverController controller) {
    return MyElevatedButton(
      title: 'You Can Cancel the Trip and get Cost From '.tr +
          AppInformation.appName.tr,
      kolor: AppColor.deepPurpleAccent,
      onPressed: () {
        MyDialog().getDialog('Are you sure to cancel?'.tr, '', () async {
          Get.find<FirebaseMessagesController>().sendNotificationToDriverMAP(
              'Driver Cancelled Your Trip',
              'You will need to pay the cost to the driver, or it will be deducted from your next trip'
                  .tr,
              controller.tokenPassenger,
              [],
              'cancel.wav');
          box.write(BoxName.rideStatus, 'Cancel');
          await controller.addWaitingTimeCostFromPassengerToDriverWallet();
          controller.isdriverWaitTimeEnd = false;
          Get.back();
        });
      },
    );
  }
}
