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

import '../../../constant/box_name.dart';
import '../../../constant/colors.dart';
import '../../../constant/style.dart';
import '../../../controller/admin/passenger_admin_controller.dart';
import '../../../main.dart'; // للوصول إلى box
import '../../widgets/elevated_btn.dart';
import '../../widgets/my_scafold.dart';
import '../../widgets/my_textField.dart';
import '../../widgets/mycircular.dart';
import 'passenger_details_page.dart';

class Passengrs extends StatelessWidget {
  Passengrs({super.key});

  final PassengerAdminController passengerAdminController =
      Get.put(PassengerAdminController());

  @override
  Widget build(BuildContext context) {
    // 1. منطق السوبر أدمن
    String myPhone = box.read(BoxName.adminPhone).toString();
    bool isSuperAdmin = myPhone == '963942542053' || myPhone == '963992952235';

    return MyScafolld(
      title: 'Passengers Management'.tr,
      isleading: true,
      body: [
        // استخدام Expanded أو Container بطول الشاشة لتجنب المشاكل
        SizedBox(
          height: Get.height, // تأمين مساحة العمل
          child: GetBuilder<PassengerAdminController>(
            builder: (controller) {
              if (controller.isLoading) {
                return const Center(child: MyCircularProgressIndicator());
              }

              return Column(
                children: [
                  // --- قسم الإحصائيات والجوائز (Dashboard) ---
                  Padding(
                    padding: const EdgeInsets.all(16.0),
                    child: _buildDashboardCard(context, controller),
                  ),

                  // --- عنوان القائمة ---
                  Padding(
                    padding: const EdgeInsets.symmetric(horizontal: 20.0),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        Text(
                          "All Passengers".tr,
                          style: AppStyle.title.copyWith(
                              fontSize: 18, fontWeight: FontWeight.bold),
                        ),
                        Text(
                          "${controller.passengersData['message']?.length ?? 0} Users",
                          style:
                              TextStyle(color: Colors.grey[600], fontSize: 12),
                        ),
                      ],
                    ),
                  ),
                  const SizedBox(height: 10),

                  // --- قائمة الركاب ---
                  // استخدام Expanded هنا هو الحل الجذري لمكلة Overflow
                  Expanded(
                    child: _buildPassengersList(controller, isSuperAdmin),
                  ),

                  // مساحة سفلية صغيرة لضمان عدم التصاق القائمة بالحافة
                  const SizedBox(height: 20),
                ],
              );
            },
          ),
        ),
      ],
    );
  }

  // --- تصميم بطاقة الإحصائيات (Dashboard) ---
  Widget _buildDashboardCard(
      BuildContext context, PassengerAdminController controller) {
    // جلب العدد بأمان
    final String countValue = (controller.passengersData['message'] != null &&
            controller.passengersData['message'].isNotEmpty)
        ? controller.passengersData['message'][0]['countPassenger']
                ?.toString() ??
            '0'
        : '0';

    return Container(
      padding: const EdgeInsets.all(20),
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(20),
        boxShadow: [
          BoxShadow(
            color: Colors.grey.withOpacity(0.1),
            blurRadius: 15,
            offset: const Offset(0, 5),
          ),
        ],
      ),
      child: Column(
        children: [
          Row(
            children: [
              Container(
                padding: const EdgeInsets.all(12),
                decoration: BoxDecoration(
                  color: AppColor.primaryColor.withOpacity(0.1),
                  shape: BoxShape.circle,
                ),
                child: Icon(Icons.groups_rounded,
                    color: AppColor.primaryColor, size: 30),
              ),
              const SizedBox(width: 15),
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    'Total Passengers'.tr,
                    style: const TextStyle(fontSize: 14, color: Colors.grey),
                  ),
                  Text(
                    countValue,
                    style: const TextStyle(
                        fontSize: 24, fontWeight: FontWeight.bold),
                  ),
                ],
              ),
            ],
          ),
          const SizedBox(height: 20),
          SizedBox(
            width: double.infinity,
            height: 45,
            child: ElevatedButton.icon(
              icon: const Icon(Icons.card_giftcard,
                  color: Colors.white, size: 20),
              label: Text('Add Prize to Gold Passengers'.tr,
                  style: const TextStyle(
                      color: Colors.white, fontWeight: FontWeight.bold)),
              style: ElevatedButton.styleFrom(
                backgroundColor: AppColor.yellowColor, // لون ذهبي
                shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(12)),
                elevation: 0,
              ),
              onPressed: () {
                _showAddPrizeDialog(controller);
              },
            ),
          ),
        ],
      ),
    );
  }

  // --- بناء قائمة الركاب ---
  Widget _buildPassengersList(
      PassengerAdminController controller, bool isSuperAdmin) {
    final List<dynamic> passengers = controller.passengersData['message'] ?? [];

    if (passengers.isEmpty) {
      return Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Icon(Icons.person_off_outlined, size: 60, color: Colors.grey[300]),
            const SizedBox(height: 10),
            Text("No passengers found".tr,
                style: TextStyle(color: Colors.grey[400])),
          ],
        ),
      );
    }

    return ListView.separated(
      padding: const EdgeInsets.symmetric(horizontal: 16),
      physics: const BouncingScrollPhysics(),
      itemCount: passengers.length,
      separatorBuilder: (context, index) => const SizedBox(height: 12),
      itemBuilder: (context, index) {
        final user = passengers[index];
        return _buildPassengerItem(user, isSuperAdmin);
      },
    );
  }

  // --- عنصر الراكب الواحد (Card) ---
  Widget _buildPassengerItem(dynamic user, bool isSuperAdmin) {
    String firstName = user['first_name'] ?? '';
    String lastName = user['last_name'] ?? '';
    String fullName = '$firstName $lastName'.trim();
    if (fullName.isEmpty) fullName = 'Unknown User';

    return Container(
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(15),
        border: Border.all(color: Colors.grey.withOpacity(0.1)),
        boxShadow: [
          BoxShadow(
            color: Colors.grey.withOpacity(0.05),
            blurRadius: 5,
            offset: const Offset(0, 2),
          ),
        ],
      ),
      child: Material(
        color: Colors.transparent,
        child: InkWell(
          borderRadius: BorderRadius.circular(15),
          onTap: () {
            // الانتقال للتفاصيل مع تمرير صلاحية الأدمن
            Get.to(
              () => const PassengerDetailsPage(),
              arguments: {'data': user, 'isSuperAdmin': isSuperAdmin},
            );
          },
          child: Padding(
            padding: const EdgeInsets.all(12.0),
            child: Row(
              children: [
                // Avatar
                CircleAvatar(
                  radius: 25,
                  backgroundColor: AppColor.primaryColor.withOpacity(0.1),
                  child: Text(
                    fullName.isNotEmpty ? fullName[0].toUpperCase() : 'U',
                    style: TextStyle(
                        color: AppColor.primaryColor,
                        fontWeight: FontWeight.bold,
                        fontSize: 18),
                  ),
                ),
                const SizedBox(width: 15),

                // Info
                Expanded(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        fullName,
                        style: const TextStyle(
                            fontWeight: FontWeight.bold, fontSize: 16),
                      ),
                      const SizedBox(height: 4),

                      // Stats Row
                      Row(
                        children: [
                          Icon(Icons.star_rounded,
                              size: 16, color: Colors.amber[700]),
                          Text(
                            " ${user['ratingPassenger'] ?? '0.0'} ",
                            style: const TextStyle(
                                fontSize: 12, fontWeight: FontWeight.bold),
                          ),
                          const SizedBox(width: 8),
                          Icon(Icons.directions_car,
                              size: 14, color: Colors.grey[400]),
                          Text(
                            " ${user['countPassengerRide'] ?? '0'} Trips",
                            style: TextStyle(
                                fontSize: 12, color: Colors.grey[600]),
                          ),
                        ],
                      ),

                      const SizedBox(height: 4),
                      // Phone Number (Masked logic)
                      Row(
                        children: [
                          Icon(Icons.phone_iphone,
                              size: 12, color: Colors.grey[400]),
                          const SizedBox(width: 4),
                          Text(
                            _formatPhoneNumber(
                                user['phone'].toString(), isSuperAdmin),
                            style: TextStyle(
                                fontSize: 12,
                                color: Colors.grey[500],
                                fontFamily: 'monospace'),
                          ),
                        ],
                      ),

                      // Email (Show only if Super Admin)
                      if (isSuperAdmin && user['email'] != null) ...[
                        const SizedBox(height: 2),
                        Text(
                          user['email'],
                          style:
                              TextStyle(fontSize: 10, color: Colors.grey[400]),
                          maxLines: 1,
                          overflow: TextOverflow.ellipsis,
                        )
                      ]
                    ],
                  ),
                ),

                // Arrow
                Icon(Icons.arrow_forward_ios_rounded,
                    size: 16, color: Colors.grey[300]),
              ],
            ),
          ),
        ),
      ),
    );
  }

  // --- دالة تنسيق الرقم (إظهار آخر 4 أرقام لغير الأدمن) ---
  String _formatPhoneNumber(String phone, bool isSuperAdmin) {
    if (isSuperAdmin) return phone; // إظهار الرقم كاملاً للسوبر أدمن

    // لغير الأدمن
    if (phone.length <= 4) return phone;
    String lastFour = phone.substring(phone.length - 4);
    String masked = '*' * (phone.length - 4);
    return '$masked$lastFour'; // النتيجة: *******5678
  }

  // --- دالة إضافة الجوائز ---
  void _showAddPrizeDialog(PassengerAdminController controller) {
    // التحقق من يوم السبت
    if (DateTime.now().weekday == DateTime.saturday) {
      Get.defaultDialog(
        title: 'Add Prize'.tr,
        titleStyle: const TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
        contentPadding: const EdgeInsets.all(20),
        content: Form(
          key: controller.formPrizeKey,
          child: Column(
            children: [
              Text(
                'Add Points to Gold Passengers wallet'.tr,
                textAlign: TextAlign.center,
                style: TextStyle(fontSize: 14, color: Colors.grey[700]),
              ),
              const SizedBox(height: 20),
              MyTextForm(
                controller: controller.passengerPrizeController,
                label: 'Prize Amount'.tr,
                hint: '1000...',
                type: TextInputType.number,
              ),
            ],
          ),
        ),
        confirm: SizedBox(
          width: 120,
          child: MyElevatedButton(
            title: 'Add',
            onPressed: () async {
              if (controller.formPrizeKey.currentState!.validate()) {
                controller.addPassengerPrizeToWalletSecure();
                Get.back();
              }
            },
          ),
        ),
        cancel: TextButton(
            onPressed: () => Get.back(),
            child:
                Text('Cancel'.tr, style: const TextStyle(color: Colors.grey))),
      );
    } else {
      Get.snackbar(
        'Not Allowed'.tr,
        'Prizes can only be added on Saturdays.'.tr,
        backgroundColor: Colors.red.withOpacity(0.1),
        colorText: Colors.red,
        icon: const Icon(Icons.error_outline, color: Colors.red),
        snackPosition: SnackPosition.TOP,
        margin: const EdgeInsets.all(10),
      );
    }
  }
}
