import 'dart:convert';

import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
import 'package:SEFER/controller/notification/ride_available_controller.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:SEFER/views/widgets/my_scafold.dart';
import 'package:SEFER/views/widgets/mycircular.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

import '../../constant/box_name.dart';
import '../../constant/links.dart';
import '../../controller/firebase/firbase_messge.dart';
import '../../controller/functions/crud.dart';
import '../../main.dart';
import '../home/Captin/driver_map_page.dart';

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

  @override
  Widget build(BuildContext context) {
    Get.put(RideAvailableController());
    return GetBuilder<RideAvailableController>(
        builder: (rideAvailableController) {
      return MyScafolld(
          title: 'Available for rides'.tr,
          body: [
            rideAvailableController.isLoading
                ? const MyCircularProgressIndicator()
                : Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: rideAvailableController
                                    .rideAvailableMap['message'].length ==
                                1 &&
                            rideAvailableController.rideAvailableMap['message']
                                    [0]['start_location'] ==
                                null
                        ? Center(
                            child: Text(
                              'No ride found yet'.tr,
                              style: AppStyle.headTitle2,
                            ),
                          )
                        : ListView.builder(
                            itemCount: rideAvailableController
                                .rideAvailableMap['message'].length,
                            itemBuilder: (BuildContext context, int index) {
                              var list = rideAvailableController
                                  .rideAvailableMap['message'][index];
                              return Container(
                                width: Get.width * .9,
                                decoration: AppStyle.boxDecoration1,
                                child: Column(
                                  mainAxisAlignment:
                                      MainAxisAlignment.spaceAround,
                                  children: [
                                    Text(
                                      ' ${list['start_location']}',
                                      style: AppStyle.title,
                                    ),
                                    Text(
                                      '${list['end_location']}',
                                      style: AppStyle.title,
                                    ),
                                    const SizedBox(height: 4),
                                    Row(
                                      mainAxisAlignment:
                                          MainAxisAlignment.spaceAround,
                                      children: [
                                        Text(
                                            '${'Price: '.tr}${list['price']} \$'),
                                        const SizedBox(height: 4),
                                        Text(
                                          '${list['carType']}',
                                          style: AppStyle.title.copyWith(
                                              color: AppColor.greenColor),
                                        ),
                                      ],
                                    ),
                                    Row(
                                      mainAxisAlignment:
                                          MainAxisAlignment.spaceAround,
                                      children: [
                                        Text('📈 ${list['passengerRate']}',
                                            style: AppStyle.title),
                                        MyElevatedButton(
                                          title: 'Accept'.tr,
                                          onPressed: () async {
                                            box.write(
                                                BoxName.statusDriverLocation,
                                                'on');

                                            var res = await CRUD().post(
                                                link: AppLink
                                                    .updateStausFromSpeed,
                                                payload: {
                                                  'id': list['id'],
                                                  'rideTimeStart':
                                                      DateTime.now().toString(),
                                                  'status': 'Apply',
                                                  'driver_id': box
                                                      .read(BoxName.driverID),
                                                });
                                            // .then((value) {
                                            // var json = jsonDecode(res);
                                            print('res $res');
                                            if (res == "failure") {
                                              Get.defaultDialog(
                                                  title:
                                                      "This ride is already taken by another driver."
                                                          .tr,
                                                  middleText: '',
                                                  titleStyle: AppStyle.title,
                                                  middleTextStyle:
                                                      AppStyle.title,
                                                  confirm: MyElevatedButton(
                                                      title: 'Ok'.tr,
                                                      onPressed: () {
                                                        Get.back();
                                                        Get.back();
                                                        Get.back();
                                                      }));
                                            } else if (jsonDecode(
                                                    res)['status'] ==
                                                "success") {
                                              List<String> bodyToPassenger = [
                                                box
                                                    .read(BoxName.driverID)
                                                    .toString(),
                                                box
                                                    .read(BoxName.nameDriver)
                                                    .toString(),
                                                box
                                                    .read(BoxName.tokenDriver)
                                                    .toString(),
                                              ];
                                              await CRUD().postFromDialogue(
                                                  link: AppLink.addDriverOrder,
                                                  payload: {
                                                    'driver_id': box
                                                        .read(BoxName.driverID),
                                                    // box.read(BoxName.driverID).toString(),
                                                    'order_id': list['id'],
                                                    'status': 'Apply'
                                                  });
                                              await CRUD().post(
                                                  link: AppLink.updateRides,
                                                  payload: {
                                                    'id': list['id'],
                                                    'driverGoToPassengerTime':
                                                        DateTime.now()
                                                            .toString(),
                                                    'status': 'Applied'
                                                  });

                                              // print(bodyToPassenger);
                                              FirebaseMessagesController()
                                                  .sendNotificationToPassengerToken(
                                                'Apply Ride',
                                                'your ride is applied'.tr,
                                                // arguments['DriverList'][9].toString(),
                                                list['passengerToken']
                                                    .toString(),
                                                // box.read(BoxName.tokenDriver).toString(),
                                                bodyToPassenger,
                                              );
                                              Get.back();
                                              Get.to(
                                                  () =>
                                                      PassengerLocationMapPage(),
                                                  arguments: {
                                                    'passengerLocation':
                                                        list['start_location']
                                                            .toString(),
                                                    'passengerDestination':
                                                        list['end_location']
                                                            .toString(),
                                                    'Duration': list['duration']
                                                        .toString(),
                                                    'totalCost': list['price']
                                                        .toString(),
                                                    'Distance': list['distance']
                                                        .toString(),
                                                    'name': list['first_name']
                                                        .toString(),
                                                    'phone': list['phone']
                                                        .toString(),
                                                    'email': list['email']
                                                        .toString(),
                                                    'WalletChecked':
                                                        list['payment_method']
                                                            .toString(),
                                                    'tokenPassenger':
                                                        list['passengerToken']
                                                            .toString(),
                                                    'direction':
                                                        'https://www.google.com/maps/dir/${list['start_location']}/${list['end_location']}/',
                                                    'DurationToPassenger':
                                                        list['duration']
                                                            .toString(),
                                                    'rideId':
                                                        list['id'].toString(),
                                                    'passengerId':
                                                        list['passenger_id']
                                                            .toString(),
                                                    'driverId': box
                                                        .read(BoxName.driverID)
                                                        .toString(),
                                                    'durationOfRideValue':
                                                        list['duration']
                                                            .toString(),
                                                    'paymentAmount':
                                                        list['price']
                                                            .toString(),
                                                    'paymentMethod':
                                                        'cash'.toString() == //todo fix payment method
                                                                'true'
                                                            ? 'visa'
                                                            : 'cash',
                                                    'isHaveSteps':
                                                        'startEnd'.toString(),
                                                    'step0': ''.toString(),
                                                    'step1': ''.toString(),
                                                    'step2': ''.toString(),
                                                    'step3': ''.toString(),
                                                    'step4': ''.toString(),
                                                    'passengerWalletBurc':
                                                        list['bruc'].toString(),
                                                    'timeOfOrder':
                                                        DateTime.now()
                                                            .toString(),
                                                    'totalPassenger':
                                                        list['price']
                                                            .toString(),
                                                    'carType': list['carType']
                                                        .toString(),
                                                    'kazan': Get.find<
                                                            HomeCaptainController>()
                                                        .kazan
                                                        .toString(),
                                                  });
                                            }
                                          },
                                          kolor: AppColor.greenColor,
                                        ),
                                        Text(
                                          '📍 ${list['distance']} ${'KM'.tr}',
                                          style: AppStyle.title.copyWith(
                                              color: AppColor.greenColor),
                                        ),
                                      ],
                                    )
                                  ],
                                ),
                              );
                            }),
                  )
          ],
          isleading: true);
    });
  }
}
