import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:service/constant/colors.dart';
import 'package:service/constant/links.dart';
import 'package:service/controller/functions/crud.dart';
import 'package:service/controller/mainController/main_controller.dart';
import 'package:service/controller/mainController/pages/best_driver_page.dart';
import 'package:service/controller/mainController/pages/complaint.dart';
import 'package:service/controller/mainController/pages/edit_car_plate.dart';
import 'package:service/controller/mainController/pages/passengers_cant_regster.dart';
import 'package:service/views/widgets/elevated_btn.dart';
import 'package:service/views/widgets/my_dialog.dart';
import 'package:service/views/widgets/my_textField.dart';

import '../../constant/box_name.dart';
import '../../constant/style.dart';
import '../../controller/mainController/pages/add_car.dart';
import '../../controller/mainController/pages/drivers_cant_register.dart';
import '../../controller/mainController/pages/new_driver.dart';
import '../../controller/mainController/pages/welcome_call.dart';
import '../../main.dart';
import '../../print.dart';
import '../widgets/my_scafold.dart';

// --- Service Item Model ---
// A helper class to structure the data for each service card.
// This makes the code cleaner and easier to manage.
class ServiceItem {
  final String title;
  final IconData icon;
  final VoidCallback onTap;

  ServiceItem({required this.title, required this.icon, required this.onTap});
}

// --- Main Screen Widget (Redesigned) ---
class Main extends StatelessWidget {
  Main({super.key});

  final MainController mainController = Get.put(MainController());

  @override
  Widget build(BuildContext context) {
    // --- List of Services ---
    // All services are defined here in a list. This makes it easy to add, remove, or reorder them.
    // The original onTap logic is preserved exactly as it was.
    final List<ServiceItem> services = [
      ServiceItem(
        title: 'passenger details by phone'.tr,
        icon: Icons.person_search_rounded,
        onTap: () {
          MyDialog().getDialog(
            'insert passenger phone'.tr,
            'midTitle',
            Column(children: [
              Form(
                key: mainController.formKey,
                child: MyTextForm(
                  controller: mainController.passengerPhoneController,
                  label: 'insert passenger phone'.tr,
                  hint: 'insert passenger phone'.tr,
                  type: TextInputType.phone,
                ),
              ),
            ]),
            () => mainController.searchPassengerByPhone(),
          );
        },
      ),
      ServiceItem(
        title: 'Driver details by phone'.tr,
        icon: Icons.support_agent_rounded,
        onTap: () {
          MyDialog().getDialog(
            'insert Driver phone'.tr,
            'midTitle',
            Column(children: [
              Form(
                key: mainController.formKey,
                child: MyTextForm(
                  controller: mainController.driverPhoneController,
                  label: 'insert Driver phone'.tr,
                  hint: 'insert Driver phone'.tr,
                  type: TextInputType.phone,
                ),
              ),
            ]),
            () => mainController.searchDriverByPhone(),
          );
        },
      ),
      ServiceItem(
        title: 'Driver details by national number'.tr,
        icon: Icons.support_agent_rounded,
        onTap: () {
          MyDialog().getDialog(
            'insert Driver national'.tr,
            'midTitle',
            Column(children: [
              Form(
                key: mainController.formKey,
                child: MyTextForm(
                  controller: mainController.driverPhoneController,
                  label: 'insert Driver national'.tr,
                  hint: 'insert Driver national'.tr,
                  type: TextInputType.number,
                ),
              ),
            ]),
            () => mainController.searchDriverByNational(),
          );
        },
      ),
      ServiceItem(
        title: 'Drivers waitting Register'.tr,
        icon: Icons.pending_actions_rounded,
        onTap: () async {
          await mainController.getDriverWantCompleteRegistration();
          Get.to(() => DriversCantRegister());
        },
      ),
      ServiceItem(
        title: 'Register new driver'.tr,
        icon: Icons.person,
        onTap: () {
          // await mainController.getDriverWantCompleteRegistration();
          Get.to(() => RegisterCaptain());
        },
      ),
      ServiceItem(
        title: 'Drivers Cant Register'.tr,
        icon: Icons.car_crash,
        onTap: () async {
          await mainController.getDriverNotCompleteRegistration();
          Get.to(() => DriversCantRegister());
        },
      ),
      ServiceItem(
        title: 'Drivers phones not register'.tr,
        icon: Icons.person,
        onTap: () async {
          await mainController.getDriversPhoneNotComplete();
          Get.to(() => DriversCantRegister());
        },
      ),
      ServiceItem(
        title: 'Drivers Activity'.tr,
        icon: Icons.person,
        onTap: () async {
          await mainController.getDriversPhoneNotComplete();
          Get.to(() => DriversCantRegister());
        },
      ),
      ServiceItem(
        title: 'Passengers Cant Register'.tr,
        icon: Icons.group_off_rounded,
        onTap: () async {
          await mainController.getPassengerNotCompleteRegistration();
          Get.to(() => PassengersCantRegister());
        },
      ),
      ServiceItem(
        title: 'Add car'.tr,
        icon: Icons.add_circle_outline_rounded,
        onTap: () async {
          await mainController.getdriverWithoutCar();
          if (mainController.driverWithoutCar.isNotEmpty) {
            Get.to(() => const AddCar());
          }
        },
      ),
      ServiceItem(
        title: 'Edit car plate'.tr,
        icon: Icons.edit_note_rounded,
        onTap: () async {
          await mainController.getCarPlateNotEdit();
          if (mainController.carPlateNotEdit.isNotEmpty) {
            Get.to(() => const EditCarPlate());
          }
        },
      ),
      ServiceItem(
        title: "View complaint".tr,
        icon: Icons.report_problem_rounded,
        onTap: () {
          Get.to(() => const Complaint());
        },
      ),
      ServiceItem(
        title: "Welcome call".tr,
        icon: Icons.ring_volume_rounded,
        onTap: () async {
          await mainController.getNewDriverRegister();
          Get.to(() => const WelcomeCall());
        },
      ),
      ServiceItem(
        title: "best driver".tr,
        icon: Icons.emoji_events_rounded,
        onTap: () async {
          await mainController.getNewDriverRegister();
          Get.to(() => DriverTheBest());
        },
      ),
      ServiceItem(
        title: "Add Driver Who Wants to Work".tr,
        icon: Icons.person_add_alt_1_rounded,
        onTap: () {
          Get.defaultDialog(
            barrierDismissible: false,
            title: "Add Driver Who Wants to Work".tr,
            content: SizedBox(
              width: Get.width * .7,
              height: 300,
              child: Form(
                  key: mainController.formKey,
                  child: ListView(
                    children: [
                      MyTextForm(
                          controller: mainController.driverNameController,
                          label: 'Insert Name of Driver'.tr,
                          hint: 'Insert Name of Driver'.tr,
                          type: TextInputType.name),
                      MyTextForm(
                          controller: mainController.nationalIdController,
                          label: 'Insert national ID of Driver'.tr,
                          hint: 'Insert national ID of Driver'.tr,
                          type: TextInputType.number),
                      MyTextForm(
                          controller: mainController.phoneController,
                          label: 'Insert phone of Driver'.tr,
                          hint: 'Insert phone of Driver'.tr,
                          type: TextInputType.phone),
                      MyTextForm(
                          controller: mainController.licenseTypeController,
                          label: 'Insert license type of Driver'.tr,
                          hint: 'Insert license type of Driver'.tr,
                          type: TextInputType.name),
                      MyTextForm(
                          controller: mainController.siteDriverController,
                          label: 'Insert site of Driver'.tr,
                          hint: 'Insert site of Driver'.tr,
                          type: TextInputType.name),
                      MyTextForm(
                          controller: mainController.birthDateController,
                          label: 'Insert birth_date of Driver'.tr,
                          hint: 'Insert license type of Driver'.tr,
                          type: TextInputType.number),
                    ],
                  )),
            ),
            confirm: MyElevatedButton(
              title: 'Add'.tr,
              onPressed: () async {
                // if (mainController.formKey.currentState!.validate()) {
                var res = await CRUD()
                    .post(link: AppLink.addDriverWantWork, payload: {
                  "driver_name": mainController.driverNameController.text,
                  "national_id": mainController.nationalIdController.text,
                  "birth_date": mainController.birthDateController.text,
                  "site": mainController.siteDriverController.text,
                  "license_type": mainController.licenseTypeController.text,
                  "phone": mainController.phoneController.text,
                });
                if (res != 'failure' && res['status'] == 'success') {
                  Get.back();
                  mainController.driverNameController.clear();
                  mainController.nationalIdController.clear();
                  mainController.birthDateController.clear();
                  mainController.licenseTypeController.clear();
                  mainController.siteDriverController.clear();
                  mainController.phoneController.clear();
                  Get.snackbar('done', '',
                      backgroundColor: AppColor.greenColor);
                }
                // }
              },
              kolor: AppColor.greenColor,
            ),
            cancel: MyElevatedButton(
                title: 'Cancel'.tr,
                kolor: AppColor.redColor,
                onPressed: () {
                  Get.back();
                }),
          );
        },
      ),
      ServiceItem(
        title: "Add Car Who Wants to Work".tr,
        icon: Icons.directions_car_filled_rounded,
        onTap: () {
          Get.defaultDialog(
            barrierDismissible: false,
            title: "Add Car Who Wants to Work".tr,
            content: SizedBox(
              width: Get.width * .7,
              height: 300,
              child: Form(
                  key: mainController.formKey,
                  child: ListView(
                    children: [
                      MyTextForm(
                          controller: mainController.carOwnerWorkController,
                          label: 'Insert Name of Owner'.tr,
                          hint: 'Insert Name of Owner'.tr,
                          type: TextInputType.name),
                      MyTextForm(
                          controller: mainController.carNumberController,
                          label: 'Insert car_number of Driver'.tr,
                          hint: 'Insert car_number of Driver'.tr,
                          type: TextInputType.name),
                      MyTextForm(
                          controller: mainController.phoneCarController,
                          label: 'Insert phone of Owner'.tr,
                          hint: 'Insert phone of Owner'.tr,
                          type: TextInputType.phone),
                      MyTextForm(
                          controller: mainController.manufactureYearController,
                          label: 'Insert year of Car'.tr,
                          hint: 'Insert year of Car'.tr,
                          type: TextInputType.number),
                      MyTextForm(
                          controller: mainController.carModelController,
                          label: 'Insert car_model of Driver'.tr,
                          hint: 'Insert car_model of Driver'.tr,
                          type: TextInputType.name),
                      MyTextForm(
                          controller: mainController.siteCarController,
                          label: 'Insert site of Owner'.tr,
                          hint: 'Insert site of Owner'.tr,
                          type: TextInputType.name),
                      MyTextForm(
                          controller: mainController.carTypeController,
                          label: 'Insert car_type of Driver'.tr,
                          hint: 'Insert car_type of Driver'.tr,
                          type: TextInputType.name),
                      MyTextForm(
                          controller: mainController.registrationDateController,
                          label: 'Insert registration_date of Car'.tr,
                          hint: 'Insert registration_date of Car'.tr,
                          type: TextInputType.datetime),
                    ],
                  )),
            ),
            confirm: MyElevatedButton(
              title: 'Add'.tr,
              onPressed: () async {
                // if (mainController.formKey.currentState!.validate()) {
                var res =
                    await CRUD().post(link: AppLink.addCarWantWork, payload: {
                  "owner_name": mainController.carOwnerWorkController.text,
                  "car_number": mainController.carNumberController.text,
                  "manufacture_year":
                      mainController.manufactureYearController.text,
                  "car_model": mainController.carModelController.text,
                  "car_type": mainController.carTypeController.text,
                  "site": mainController.siteCarController.text,
                  "registration_date":
                      mainController.registrationDateController.text,
                  "phone": mainController.phoneCarController.text,
                });
                Log.print('res: ${res}');
                if (res != 'failure' && res['status'] == 'success') {
                  Get.back();
                  mainController.ownerController.clear();
                  mainController.carNumberController.clear();
                  mainController.manufactureYearController.clear();
                  mainController.carModelController.clear();
                  mainController.siteCarController.clear();
                  mainController.carTypeController.clear();
                  mainController.registrationDateController.clear();
                  mainController.phoneController.clear();
                  Get.snackbar('done', '',
                      backgroundColor: AppColor.greenColor);
                }
                // }
              },
              kolor: AppColor.greenColor,
            ),
            cancel: MyElevatedButton(
                title: 'Cancel'.tr,
                kolor: AppColor.redColor,
                onPressed: () {
                  Get.back();
                }),
          );
        },
      ),
    ];

    // --- Building the UI ---
    return MyScaffold(
      title: 'Intaleq Service'.tr,
      isleading: false,
      action: MyElevatedButton(
        title: 'Logout'.tr,
        onPressed: () async {
          // box.write(BoxName.employeename, 'masa');
          print(box.read(BoxName.employeename).toString());
        },
        kolor: AppColor.redColor,
      ),
      // The body now uses a GridView for a better layout.
      // You can replace the color with your main theme color.
      // backgroundColor: const Color(0xFFF5F7FA),
      body: [
        GridView.builder(
          padding: const EdgeInsets.all(16.0),
          itemCount: services.length,
          gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
            crossAxisCount: 2, // Two columns
            crossAxisSpacing: 16.0, // Horizontal space between cards
            mainAxisSpacing: 16.0, // Vertical space between cards
            childAspectRatio: 1.1, // Adjust card shape (width/height ratio)
          ),
          itemBuilder: (context, index) {
            final service = services[index];
            return ServiceCard(
              title: service.title,
              icon: service.icon,
              onTap: service.onTap,
            );
          },
        ),
      ],
    );
  }
}

// --- Service Card Widget ---
// A reusable widget for displaying each service.
class ServiceCard extends StatelessWidget {
  final String title;
  final IconData icon;
  final VoidCallback onTap;

  const ServiceCard({
    super.key,
    required this.title,
    required this.icon,
    required this.onTap,
  });

  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: onTap,
      borderRadius: BorderRadius.circular(16.0),
      child: Container(
        decoration: BoxDecoration(
          color: Colors.white,
          borderRadius: BorderRadius.circular(16.0),
          boxShadow: [
            BoxShadow(
              color: Colors.grey.withOpacity(0.15),
              spreadRadius: 2,
              blurRadius: 8,
              offset: const Offset(0, 4), // changes position of shadow
            ),
          ],
        ),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            // Icon
            Icon(
              icon,
              size: 48.0,
              // You can replace this color with your AppStyle color
              color: Theme.of(context).primaryColor,
            ),
            const SizedBox(height: 12),
            // Title
            Padding(
              padding: const EdgeInsets.symmetric(horizontal: 8.0),
              child: Text(
                title,
                textAlign: TextAlign.center,
                style: const TextStyle(
                  fontWeight: FontWeight.w600,
                  fontSize: 14,
                  // You can replace this color with your AppStyle color
                  color: Color(0xFF4A4A4A),
                ),
                maxLines: 2,
                overflow: TextOverflow.ellipsis,
              ),
            ),
          ],
        ),
      ),
    );
  }
}
