import 'package:SEFER/controller/functions/tts.dart';
import 'package:SEFER/views/home/my_wallet/payment_history_driver_page.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/info.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/home/map_passenger_controller.dart';
import 'package:SEFER/controller/home/payment/captain_wallet_controller.dart';
import 'package:SEFER/controller/payment/payment_controller.dart';
import 'package:SEFER/main.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:SEFER/views/widgets/my_textField.dart';
import 'package:SEFER/views/widgets/mycircular.dart';
import 'package:path/path.dart';

import '../../widgets/my_scafold.dart';
import 'points_captain.dart';

class WalletCaptain extends StatelessWidget {
  WalletCaptain({super.key});
  CaptainWalletController captainWalletController =
      Get.put(CaptainWalletController());
  @override
  Widget build(BuildContext context) {
    Get.put(MapPassengerController());
    return MyScafolld(
      title: 'Driver Wallet'.tr,
      body: [
        GetBuilder<CaptainWalletController>(
            builder: (captainWalletController) => captainWalletController
                    .isLoading
                ? const MyCircularProgressIndicator()
                : Padding(
                    padding: const EdgeInsets.all(10),
                    child: ListView(
                      // crossAxisAlignment: CrossAxisAlignment.center,
                      children: [
                        const SizedBox(),
                        Container(
                          decoration: AppStyle.boxDecoration.copyWith(
                            color: double.parse(captainWalletController
                                            .totalPoints) <
                                        0 &&
                                    double.parse(captainWalletController
                                            .totalPoints) >
                                        -300
                                ? AppColor.yellowColor
                                : double.parse(captainWalletController
                                            .totalPoints) <
                                        -300
                                    ? AppColor.redColor
                                    : AppColor.greenColor,
                          ),
                          child: InkWell(
                            onTap: () {
                              Get.snackbar(
                                'the 300 points equal 300 L.E'.tr,
                                'the 300 points equal 300 L.E for you \nSo go and gain your money'
                                    .tr,
                                backgroundColor: AppColor.greenColor,
                                snackPosition: SnackPosition.BOTTOM,
                                duration: const Duration(seconds: 4),
                              );
                            },
                            child: Padding(
                              padding:
                                  const EdgeInsets.symmetric(horizontal: 4),
                              child: Text(
                                '${'Total Points is'.tr} ${captainWalletController.totalPoints.toString()} 💎',
                                style: AppStyle.headTitle2,
                              ),
                            ),
                          ),
                        ),
                        const SizedBox(
                          height: 10,
                        ),
                        double.parse(captainWalletController.totalPoints
                                    .toString()) <
                                -300
                            ? MyElevatedButton(
                                title: 'Charge your Account'.tr,
                                onPressed: () {})
                            : const SizedBox(),
                        const SizedBox(
                          height: 10,
                        ),
                        const CardSeferWalletDriver(),
                        Card(
                          elevation: 4,
                          child: Padding(
                            padding: const EdgeInsets.symmetric(horizontal: 4),
                            child: Column(
                              children: [
                                Row(
                                  mainAxisAlignment:
                                      MainAxisAlignment.spaceBetween,
                                  children: [
                                    Text(
                                      'Total Budget from trips is '.tr,
                                      style: AppStyle.title,
                                    ),
                                    Container(
                                      decoration: BoxDecoration(
                                          border: Border.all(
                                              width: 2,
                                              color: AppColor.redColor)),
                                      child: GestureDetector(
                                        onTap: () {
                                          Get.snackbar(
                                            icon: InkWell(
                                                onTap: () async {
                                                  await Get.find<
                                                          TextToSpeechController>()
                                                      .speakText(
                                                          'This amount for all trip I get from Passengers'
                                                              .tr);
                                                },
                                                child: const Icon(
                                                    Icons.headphones)),
                                            '${'Total Amount:'.tr} ${captainWalletController.totalAmount}\$',
                                            'This amount for all trip I get from Passengers'
                                                .tr,
                                            duration:
                                                const Duration(seconds: 6),
                                            backgroundColor:
                                                AppColor.yellowColor,
                                            snackPosition: SnackPosition.BOTTOM,
                                          );
                                        },
                                        child: Padding(
                                          padding: const EdgeInsets.all(2),
                                          child: Text(
                                              '${captainWalletController.totalAmount}\$'),
                                        ),
                                      ),
                                    )
                                  ],
                                ),
                                const SizedBox(
                                  height: 10,
                                ),
                                Row(
                                  mainAxisAlignment:
                                      MainAxisAlignment.spaceBetween,
                                  children: [
                                    Text(
                                      'Total Budget from trips by\nCredit card is '
                                          .tr,
                                      style: AppStyle.title,
                                    ),
                                    Container(
                                        decoration: BoxDecoration(
                                            border: Border.all(
                                                width: 2,
                                                color: AppColor.greenColor)),
                                        child: Padding(
                                          padding: const EdgeInsets.all(2),
                                          child: InkWell(
                                            onTap: () {
                                              Get.snackbar(
                                                icon: InkWell(
                                                  onTap: () async {
                                                    await Get.find<
                                                            TextToSpeechController>()
                                                        .speakText(
                                                      'This amount for all trip I get from Passengers and Collected For me in'
                                                              .tr +
                                                          ' SAFAR Wallet'.tr,
                                                    );
                                                  },
                                                  child: const Icon(
                                                      Icons.headphones),
                                                ),
                                                '${'Total Amount:'.tr} ${captainWalletController.totalAmountVisa}\$',
                                                'This amount for all trip I get from Passengers and Collected For me in'
                                                        .tr +
                                                    ' ${AppInformation.appName} Wallet'
                                                        .tr,
                                                duration:
                                                    const Duration(seconds: 6),
                                                backgroundColor:
                                                    AppColor.redColor,
                                                snackPosition:
                                                    SnackPosition.BOTTOM,
                                              );
                                            },
                                            child: Text(
                                                '${captainWalletController.totalAmountVisa}\$'),
                                          ),
                                        ))
                                  ],
                                ),
                                const SizedBox(
                                  height: 10,
                                ),
                                MyElevatedButton(
                                  title:
                                      'You can buy points from your budget'.tr,
                                  onPressed: () {
                                    Get.defaultDialog(
                                        title: 'Pay from my budget'.tr,
                                        titleStyle: AppStyle.title,
                                        content: Form(
                                          key: captainWalletController.formKey,
                                          child: MyTextForm(
                                            controller: captainWalletController
                                                .amountFromBudgetController,
                                            label:
                                                '${'You have in account'.tr} ${captainWalletController.totalAmountVisa}',
                                            hint:
                                                '${'You have in account'.tr} ${captainWalletController.totalAmountVisa}',
                                            type: TextInputType.number,
                                          ),
                                        ),
                                        confirm: MyElevatedButton(
                                            title: 'Pay',
                                            onPressed: () async {
                                              if (double.parse(
                                                      captainWalletController
                                                          .amountFromBudgetController
                                                          .text) <
                                                  double.parse(
                                                      captainWalletController
                                                          .totalAmountVisa)) {
                                                await captainWalletController
                                                    .payFromBudget();
                                              } else {
                                                Get.back();
                                                Get.snackbar(
                                                  'Your Budget less than needed'
                                                      .tr,
                                                  '',
                                                  duration: const Duration(
                                                      seconds: 3),
                                                  backgroundColor:
                                                      AppColor.redColor,
                                                  snackPosition:
                                                      SnackPosition.BOTTOM,
                                                );
                                              }
                                            }),
                                        cancel: MyElevatedButton(
                                            title: 'Cancel'.tr,
                                            onPressed: () {
                                              Get.back();
                                            }));
                                  },
                                ),
                              ],
                            ),
                          ),
                        ),
                        const SizedBox(
                          height: 10,
                        ),
                        Container(
                          decoration: AppStyle.boxDecoration,
                          child: Column(
                            children: [
                              Text(
                                'You can buy Points to let you online\nby this list below'
                                    .tr,
                                textAlign: TextAlign.center,
                                style: AppStyle.title,
                              ),
                              const Divider(
                                indent: 30,
                                endIndent: 30,
                                color: AppColor.accentColor,
                                thickness: 3,
                              ),
                              const SizedBox(
                                height: 10,
                              ),
                              Container(
                                  decoration: AppStyle.boxDecoration,
                                  height: Get.height * .1,
                                  child: ListView(
                                    scrollDirection: Axis.horizontal,
                                    children: [
                                      PointsCaptain(
                                        kolor: AppColor.blueColor,
                                        pricePoint:
                                            box.read(BoxName.countryCode) ==
                                                    'Jordan'
                                                ? 5
                                                : 100,
                                        countPoint:
                                            box.read(BoxName.countryCode) ==
                                                    'Jordan'
                                                ? '300'
                                                : '100',
                                      ),
                                      PointsCaptain(
                                        kolor: Colors.green,
                                        pricePoint:
                                            box.read(BoxName.countryCode) ==
                                                    'Jordan'
                                                ? 10
                                                : 200,
                                        countPoint:
                                            box.read(BoxName.countryCode) ==
                                                    'Jordan'
                                                ? '1040'
                                                : '210',
                                      ),
                                      PointsCaptain(
                                        kolor: Colors.amberAccent,
                                        pricePoint:
                                            box.read(BoxName.countryCode) ==
                                                    'Jordan'
                                                ? 22
                                                : 400,
                                        countPoint:
                                            box.read(BoxName.countryCode) ==
                                                    'Jordan'
                                                ? '2300'
                                                : '450',
                                      ),
                                      PointsCaptain(
                                        kolor: AppColor.yellowColor,
                                        pricePoint:
                                            box.read(BoxName.countryCode) ==
                                                    'Jordan'
                                                ? 50
                                                : 1000,
                                        countPoint:
                                            box.read(BoxName.countryCode) ==
                                                    'Jordan'
                                                ? '55000'
                                                : '1200',
                                      ),
                                    ],
                                  )),
                            ],
                          ),
                        ),
                        const SizedBox(
                          height: 30,
                        ),
                        box
                                .read(BoxName.accountIdStripeConnect)
                                .toString()
                                .isEmpty
                            ? Row(
                                mainAxisAlignment: MainAxisAlignment.center,
                                children: [
                                  MyElevatedButton(
                                      title:
                                          'Create Wallet to receive your money',
                                      onPressed: () async {
                                        PaymentController paymentController =
                                            Get.find<PaymentController>();
                                        paymentController
                                            .createConnectAccount();
                                      }),
                                ],
                              )
                            : const SizedBox(
                                height: 30,
                              ),
                        Padding(
                          padding: const EdgeInsets.symmetric(horizontal: 30),
                          child: Row(
                            children: [
                              MyElevatedButton(
                                kolor: AppColor.blueColor,
                                title: 'Payment History'.tr,
                                onPressed: () {
                                  Get.to(() => const PaymentHistoryDriverPage(),
                                      transition: Transition.size);
                                },
                              ),
                            ],
                          ),
                        ),

                        // TextButton(
                        //   onPressed: () async {
                        //     PaymentController paymentController =
                        //         Get.put(PaymentController());
                        //     await paymentController.createTransactionToCaptain(
                        //         '1000',
                        //         box.read(BoxName.accountIdStripeConnect));
                        //   },
                        //   child: const Text(
                        //     "Pay to Captain",
                        //   ),
                        // )
                      ],
                    ),
                  ))
      ],
      isleading: true,
      action: InkWell(
          onTap: () {
            captainWalletController.getCaptainWalletFromBuyPoints();
          },
          child: const Icon(Icons.refresh)),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Container(
          width: Get.width * .85,
          height: Get.height * .25,
          decoration: BoxDecoration(
            color: AppColor.deepPurpleAccent,
            borderRadius: const BorderRadius.all(Radius.circular(12)),
            gradient: const LinearGradient(
                colors: [AppColor.blueColor, AppColor.primaryColor]),
          ),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              Row(
                children: [
                  Text(
                    '${AppInformation.appName} Wallet',
                    style: AppStyle.headTitle
                        .copyWith(color: AppColor.primaryColor),
                  )
                ],
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text(
                    '${Get.find<CaptainWalletController>().totalAmountVisa}\$' ??
                        '0.0 \$',
                    style: AppStyle.headTitle2,
                  )
                ],
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.end,
                children: [
                  Text(
                    box.read(BoxName.nameDriver),
                    style: AppStyle.title,
                  )
                ],
              )
            ],
          ),
        ),
      ],
    );
  }
}
