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

import '../../../constant/box_name.dart';
import '../../../constant/colors.dart';
import '../../../controller/admin/passenger_admin_controller.dart';
import '../../../controller/functions/crud.dart';
import '../../../controller/firebase/firbase_messge.dart';
import '../../../constant/links.dart';
import '../../../main.dart'; // To access 'box' for admin phone check
import '../../widgets/elevated_btn.dart';
import '../../widgets/my_scafold.dart';
import '../../widgets/my_textField.dart';
import 'form_passenger.dart';

class PassengerDetailsPage extends StatelessWidget {
  const PassengerDetailsPage({super.key});

  @override
  Widget build(BuildContext context) {
    final Map<String, dynamic> data = Get.arguments['data'];
    final controller = Get.find<PassengerAdminController>();

    // 1. Define Super Admin Logic (Same as Captains Page)
    String myPhone = box.read(BoxName.adminPhone).toString();
    bool isSuperAdmin = myPhone == '963942542053' || myPhone == '963992952235';

    return MyScafolld(
      title: 'Passenger Profile'.tr,
      isleading: true,
      body: [
        SingleChildScrollView(
          padding: const EdgeInsets.only(bottom: 40),
          child: Column(
            children: [
              // --- Header Section (Avatar & Name) ---
              _buildHeaderSection(context, data),

              const SizedBox(height: 20),

              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 16.0),
                child: Column(
                  children: [
                    // --- Personal Information Card ---
                    _buildInfoCard(
                      title: 'Personal Information',
                      icon: Icons.person,
                      children: [
                        _buildDetailTile(
                          Icons.email_outlined,
                          'Email',
                          isSuperAdmin
                              ? data['email']
                              : _maskEmail(data['email']),
                        ),
                        _buildDetailTile(
                          Icons.phone_iphone,
                          'Phone',
                          _formatPhoneNumber(
                              data['phone'].toString(), isSuperAdmin),
                        ),
                        _buildDetailTile(
                          Icons.transgender,
                          'Gender',
                          data['gender'] ?? 'Not specified',
                        ),
                        _buildDetailTile(
                          Icons.cake_outlined,
                          'Birthdate',
                          data['birthdate'] ?? 'N/A',
                        ),
                        _buildDetailTile(
                          Icons.location_on_outlined,
                          'Site',
                          data['site'] ?? 'N/A',
                        ),
                        // SOS Phone is critical, usually shown, but we can mask it too if needed
                        _buildDetailTile(
                          Icons.sos,
                          'SOS Phone',
                          data['sosPhone'] ?? 'N/A',
                          valueColor: Colors.redAccent,
                        ),
                      ],
                    ),
                    const SizedBox(height: 16),

                    // --- Ride Statistics Card ---
                    _buildInfoCard(
                      title: 'Activity & Stats',
                      icon: Icons.bar_chart_rounded,
                      children: [
                        _buildDetailTile(
                          Icons.star_rate_rounded,
                          'Rating',
                          '${data['ratingPassenger'] ?? 0.0}',
                          valueColor: Colors.amber[700],
                        ),
                        _buildDetailTile(
                          Icons.directions_car_filled_outlined,
                          'Total Rides',
                          data['countPassengerRide'],
                        ),
                        _buildDetailTile(
                          Icons.cancel_outlined,
                          'Canceled Rides',
                          data['countPassengerCancel'],
                          valueColor: Colors.redAccent,
                        ),
                        _buildDetailTile(
                          Icons.rate_review_outlined,
                          'Feedback Given',
                          data['countFeedback'],
                        ),
                      ],
                    ),
                    const SizedBox(height: 30),

                    // --- Action Buttons ---
                    _buildActionButtons(
                        context, controller, data, isSuperAdmin),
                  ],
                ),
              ),
            ],
          ),
        ),
      ],
    );
  }

  // --- Header with Gradient/White Background ---
  Widget _buildHeaderSection(BuildContext context, Map<String, dynamic> data) {
    String firstName = data['first_name'] ?? '';
    String lastName = data['last_name'] ?? '';
    String fullName = '$firstName $lastName'.trim();
    if (fullName.isEmpty) fullName = "Passenger";

    return Container(
      width: double.infinity,
      padding: const EdgeInsets.symmetric(vertical: 25),
      decoration: BoxDecoration(
        color: Colors.white,
        boxShadow: [
          BoxShadow(
            color: Colors.grey.withOpacity(0.1),
            blurRadius: 10,
            offset: const Offset(0, 5),
          )
        ],
        borderRadius: const BorderRadius.vertical(bottom: Radius.circular(30)),
      ),
      child: Column(
        children: [
          CircleAvatar(
            radius: 45,
            backgroundColor: AppColor.primaryColor.withOpacity(0.1),
            child: Text(
              fullName[0].toUpperCase(),
              style: TextStyle(
                  fontSize: 35,
                  fontWeight: FontWeight.bold,
                  color: AppColor.primaryColor),
            ),
          ),
          const SizedBox(height: 12),
          Text(
            fullName,
            style: const TextStyle(
                fontSize: 22,
                fontWeight: FontWeight.bold,
                color: Colors.black87),
          ),
          const SizedBox(height: 4),
          Container(
            padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 4),
            decoration: BoxDecoration(
              color: Colors.blue.withOpacity(0.1),
              borderRadius: BorderRadius.circular(20),
            ),
            child: Text(
              data['status'] ?? 'Active',
              style: const TextStyle(
                  fontSize: 12,
                  color: Colors.blue,
                  fontWeight: FontWeight.w600),
            ),
          ),
        ],
      ),
    );
  }

  Widget _buildInfoCard(
      {required String title,
      required IconData icon,
      required List<Widget> children}) {
    return Container(
      padding: const EdgeInsets.all(16),
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(16),
        boxShadow: [
          BoxShadow(
              color: Colors.grey.withOpacity(0.05),
              spreadRadius: 2,
              blurRadius: 10)
        ],
        border: Border.all(color: Colors.grey.withOpacity(0.1)),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Row(
            children: [
              Icon(icon, color: AppColor.primaryColor, size: 22),
              const SizedBox(width: 10),
              Text(title.tr,
                  style: const TextStyle(
                      fontSize: 17, fontWeight: FontWeight.bold)),
            ],
          ),
          Divider(height: 25, color: Colors.grey.withOpacity(0.2)),
          ...children,
        ],
      ),
    );
  }

  Widget _buildDetailTile(IconData icon, String label, dynamic value,
      {Color? valueColor}) {
    return Padding(
      padding: const EdgeInsets.symmetric(vertical: 8.0),
      child: Row(
        children: [
          Container(
            padding: const EdgeInsets.all(8),
            decoration: BoxDecoration(
                color: Colors.grey[100],
                borderRadius: BorderRadius.circular(8)),
            child: Icon(icon, color: Colors.grey[600], size: 18),
          ),
          const SizedBox(width: 14),
          Expanded(
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text(label.tr,
                    style: TextStyle(fontSize: 12, color: Colors.grey[500])),
                Text(
                  value?.toString() ?? 'N/A',
                  style: TextStyle(
                      fontSize: 15,
                      fontWeight: FontWeight.w600,
                      color: valueColor ?? Colors.black87),
                  overflow: TextOverflow.ellipsis,
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }

  Widget _buildActionButtons(
      BuildContext context,
      PassengerAdminController controller,
      Map<String, dynamic> data,
      bool isSuperAdmin) {
    return Column(
      children: [
        // --- Send Notification (For All Admins) ---
        SizedBox(
          width: double.infinity,
          height: 50,
          child: ElevatedButton.icon(
            icon: const Icon(Icons.notifications_active_outlined,
                color: Colors.white),
            label: Text("Send Notification".tr,
                style: const TextStyle(color: Colors.white, fontSize: 16)),
            style: ElevatedButton.styleFrom(
              backgroundColor: AppColor.primaryColor,
              shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(12)),
            ),
            onPressed: () => _showSendNotificationDialog(controller, data),
          ),
        ),

        // --- Edit/Delete (Super Admin Only) ---
        if (isSuperAdmin) ...[
          const SizedBox(height: 16),
          Row(
            children: [
              Expanded(
                child: ElevatedButton.icon(
                  icon: const Icon(Icons.edit_note_rounded, size: 20),
                  label: Text("Edit".tr),
                  style: ElevatedButton.styleFrom(
                    backgroundColor: Colors.white,
                    foregroundColor: AppColor.yellowColor,
                    elevation: 0,
                    side: BorderSide(color: AppColor.yellowColor),
                    shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(12)),
                    padding: const EdgeInsets.symmetric(vertical: 12),
                  ),
                  onPressed: () {
                    // Get.to(() => const FormPassenger(), arguments: {
                    //   'isEditMode': true,
                    //   'passengerData': data,
                    // });
                  },
                ),
              ),
              const SizedBox(width: 16),
              Expanded(
                child: ElevatedButton.icon(
                  icon: const Icon(Icons.delete_outline_rounded, size: 20),
                  label: Text("Delete".tr),
                  style: ElevatedButton.styleFrom(
                    backgroundColor: Colors.red[50],
                    foregroundColor: Colors.red,
                    elevation: 0,
                    shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(12)),
                    padding: const EdgeInsets.symmetric(vertical: 12),
                  ),
                  onPressed: () => _showDeleteConfirmation(data),
                ),
              ),
            ],
          ),
        ] else ...[
          // Message for normal admins
          const SizedBox(height: 15),
          Text(
            "Only Super Admins can edit or delete passengers.",
            style: TextStyle(
                color: Colors.grey[400],
                fontSize: 12,
                fontStyle: FontStyle.italic),
          )
        ],
      ],
    );
  }

  // --- Helper: Format Phone (Last 4 digits for normal admin) ---
  String _formatPhoneNumber(String phone, bool isSuperAdmin) {
    if (isSuperAdmin) return phone;
    if (phone.length <= 4) return phone;
    return '${'*' * (phone.length - 4)}${phone.substring(phone.length - 4)}';
  }

  // --- Helper: Mask Email ---
  String _maskEmail(String? email) {
    if (email == null || email.isEmpty) return 'N/A';
    int atIndex = email.indexOf('@');
    if (atIndex <= 1) return email; // Too short to mask
    return '${email.substring(0, 2)}****${email.substring(atIndex)}';
  }

  void _showSendNotificationDialog(
      PassengerAdminController controller, Map<String, dynamic> data) {
    Get.defaultDialog(
      title: 'Send Notification'.tr,
      titleStyle: const TextStyle(fontWeight: FontWeight.bold),
      content: Form(
        key: controller.formPrizeKey,
        child: Column(
          children: [
            MyTextForm(
                controller: controller.titleNotify,
                label: 'Title'.tr,
                hint: 'Notification title'.tr,
                type: TextInputType.text),
            const SizedBox(height: 10),
            MyTextForm(
                controller: controller.bodyNotify,
                label: 'Body'.tr,
                hint: 'Message body'.tr,
                type: TextInputType.text)
          ],
        ),
      ),
      confirm: SizedBox(
        width: 100,
        child: MyElevatedButton(
          title: 'Send',
          onPressed: () {
            // Validate form safely
            if (controller.formPrizeKey.currentState?.validate() ?? false) {
              // FirebaseMessagesController().sendNotificationToAnyWithoutData(
              //     controller.titleNotify.text,
              //     controller.bodyNotify.text,
              //     data['passengerToken'],
              //     'order.wav');
              Get.back();
              Get.snackbar('Success', 'Notification sent successfully!',
                  backgroundColor: Colors.green.withOpacity(0.2));
            }
          },
        ),
      ),
      cancel: TextButton(
          onPressed: () => Get.back(),
          child: Text('Cancel'.tr, style: const TextStyle(color: Colors.grey))),
    );
  }

  void _showDeleteConfirmation(Map<String, dynamic> user) {
    Get.defaultDialog(
      title: 'Confirm Deletion'.tr,
      titleStyle:
          const TextStyle(color: Colors.redAccent, fontWeight: FontWeight.bold),
      middleText:
          'Are you sure you want to delete ${user['first_name']}? This action cannot be undone.'
              .tr,
      confirm: ElevatedButton(
        style: ElevatedButton.styleFrom(backgroundColor: Colors.redAccent),
        onPressed: () async {
          // 1. Close Dialog
          Get.back();

          // 2. Perform Delete Operation
          var res = await CRUD().post(
            link: AppLink.admin_delete_and_blacklist_passenger,
            payload: {
              'id': user['id'],
              'phone': user['phone'],
              'reason': 'Deleted by admin',
            },
          );

          // 3. Handle Result
          if (res['status'] == 'success') {
            Get.back(); // Go back to list page
            Get.snackbar('Deleted', 'Passenger removed successfully',
                backgroundColor: Colors.red.withOpacity(0.2));
            // Ideally, trigger a refresh on the controller here
            // Get.find<PassengerAdminController>().getAll();
          } else {
            Get.snackbar('Error', res['message'] ?? 'Failed to delete',
                backgroundColor: Colors.red.withOpacity(0.2));
          }
        },
        child: Text('Delete'.tr, style: const TextStyle(color: Colors.white)),
      ),
      cancel: TextButton(
        onPressed: () => Get.back(),
        child: Text('Cancel'.tr, style: const TextStyle(color: Colors.grey)),
      ),
    );
  }
}
