import 'package:animated_text_kit/animated_text_kit.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
import 'package:get/get.dart';
import 'package:html/parser.dart' show parse;
import 'package:ride/constant/box_name.dart';
import 'package:ride/constant/colors.dart';
import 'package:ride/constant/info.dart';
import 'package:ride/constant/style.dart';
import 'package:ride/constant/table_names.dart';
import 'package:ride/controller/auth/captin/login_captin_controller.dart';
import 'package:ride/main.dart';
import 'package:ride/views/auth/captin/register_captin.dart';
import 'package:ride/views/widgets/elevated_btn.dart';
import 'package:ride/views/widgets/my_scafold.dart';

import '../../../constant/char_map.dart';
import '../../../constant/credential.dart';
import '../../../controller/auth/login_controller.dart';
import '../../widgets/mycircular.dart';

class LoginCaptin extends StatelessWidget {
  final controller = Get.put(LoginController());

  LoginCaptin({super.key});

  @override
  Widget build(BuildContext context) {
    Get.put(LoginCaptinController());
    return GetBuilder<LoginCaptinController>(
      builder: (controller) => MyScafolld(
        title: 'Login Captin'.tr,
        isleading: true,
        body: [
          if (box.read(BoxName.agreeTerms) != 'agreed')
            agreedPage()
          else
            SingleChildScrollView(
              child: Column(
                children: [
                  Padding(
                      padding: const EdgeInsets.all(25),
                      child: Container(
                        decoration: const BoxDecoration(
                          boxShadow: [
                            BoxShadow(
                                offset: Offset(3, 3),
                                color: AppColor.accentColor,
                                blurRadius: 3)
                          ],
                          color: AppColor.secondaryColor,
                        ),
                        child: Form(
                          key: controller.formKey,
                          child: Padding(
                            padding: const EdgeInsets.all(16.0),
                            child: SingleChildScrollView(
                              child: Column(
                                children: [
                                  TextFormField(
                                    keyboardType: TextInputType.emailAddress,
                                    controller: controller.emailController,
                                    decoration: InputDecoration(
                                      focusedBorder: OutlineInputBorder(
                                        borderSide: const BorderSide(
                                          color: AppColor.primaryColor,
                                          width: 2.0,
                                        ),
                                        borderRadius: BorderRadius.circular(10),
                                      ),
                                      fillColor: AppColor.accentColor,
                                      hoverColor: AppColor.accentColor,
                                      focusColor: AppColor.accentColor,
                                      border: const OutlineInputBorder(
                                          borderRadius: BorderRadius.all(
                                              Radius.circular(12))),
                                      labelText: 'Email'.tr,
                                      hintText: 'Enter your email address'.tr,
                                    ),
                                    validator: (value) {
                                      if (value!.isEmpty ||
                                          (!value.contains('@') ||
                                              !value.contains('.'))) {
                                        return 'Please enter Your Email.'.tr;
                                      }
                                      return null;
                                    },
                                  ),
                                  const SizedBox(
                                    height: 30,
                                  ),
                                  TextFormField(
                                    keyboardType: TextInputType.phone,
                                    cursorColor: AppColor.accentColor,
                                    controller: controller.phoneController,
                                    decoration: InputDecoration(
                                      focusedBorder: OutlineInputBorder(
                                        borderSide: const BorderSide(
                                          color: AppColor.primaryColor,
                                          width: 2.0,
                                        ),
                                        borderRadius: BorderRadius.circular(10),
                                      ),
                                      focusColor: AppColor.accentColor,
                                      fillColor: AppColor.accentColor,
                                      border: const OutlineInputBorder(
                                          borderRadius: BorderRadius.all(
                                              Radius.circular(12))),
                                      labelText: 'Phone'.tr,
                                      hintText: 'Enter your phone number'.tr,
                                    ),
                                    validator: (value) {
                                      if (value!.isEmpty ||
                                          value.length != 10) {
                                        return 'Please enter your phone number.'
                                            .tr;
                                      }
                                      return null;
                                    },
                                  ),
                                  const SizedBox(
                                    height: 15,
                                  ),
                                  TextFormField(
                                    obscureText: true,
                                    keyboardType: TextInputType.emailAddress,
                                    controller: controller.passwordController,
                                    decoration: InputDecoration(
                                      focusedBorder: OutlineInputBorder(
                                        borderSide: const BorderSide(
                                          color: AppColor.primaryColor,
                                          width: 2.0,
                                        ),
                                        borderRadius: BorderRadius.circular(10),
                                      ),
                                      fillColor: AppColor.accentColor,
                                      hoverColor: AppColor.accentColor,
                                      focusColor: AppColor.accentColor,
                                      border: const OutlineInputBorder(
                                          borderRadius: BorderRadius.all(
                                              Radius.circular(12))),
                                      labelText: 'Password'.tr,
                                      hintText:
                                          'Please enter your phone number.'.tr,
                                    ),
                                    validator: (value) {
                                      if (value!.isEmpty ||
                                          (value.length > 6)) {
                                        return 'Please enter Your Password.'.tr;
                                      }
                                      return null;
                                    },
                                  ),
                                  GetBuilder<LoginCaptinController>(
                                    builder: (controller) => controller
                                            .isloading
                                        ? const MyCircularProgressIndicator()
                                        : MyElevatedButton(
                                            onPressed: () {
                                              if (controller
                                                  .formKey.currentState!
                                                  .validate()) {
                                                controller.login();
                                              }
                                            },
                                            title: 'Submit'.tr,
                                          ),
                                  )
                                ],
                              ),
                            ),
                          ),
                        ),
                      )),
                  Text(
                    'if you don\'t have account'.tr,
                    style: AppStyle.subtitle,
                  ),
                  AnimatedTextKit(
                    onTap: () => Get.to(() => const RegisterCaptin()),
                    animatedTexts: [
                      TypewriterAnimatedText(
                        'Register Captin'.tr,
                        textStyle: AppStyle.headtitle2,
                        speed: const Duration(milliseconds: 200),
                      ),
                    ],
                    totalRepeatCount: 4,
                    pause: const Duration(milliseconds: 200),
                    displayFullTextOnTap: true,
                    stopPauseOnTap: true,
                  ),
                  IconButton(
                    onPressed: () async {
                      String v = await storage.read(
                              key: BoxName.basicAuthCredentials) ??
                          '';
                      print(v);
                      // sql.deleteAllData(TableName.faceDetectTimes);
                      AppCredintials credentials = AppCredintials();
                      String apiKey = 'hamzaayedphp:malDEV@2101';
                      // // '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';
                      // AppCredintials credentials = AppCredintials();
                      credentials.getApiKey();
                      // String? apiKeyf =
                      //     await storage.read(key: 'basicAuthCredentials');
                      // print(apiKeyf);
                      // String convertedString = credentials.c(apiKey, charMap);
                      // print('Converted String: $convertedString');
                      //
                      // String retrievedString =
                      //     credentials.r(convertedString, charMap);
                      // print('Retrieved String: $retrievedString');
                      //
                      // if (retrievedString == apiKey) {
                      //   print('same');
                      // }
                    },
                    icon: const Icon(
                      Icons.close,
                      color: AppColor.blueColor,
                    ),
                  ),
                ],
              ),
            )
        ],
      ),
    );
  }

  Padding agreedPage() {
    return Padding(
      padding: const EdgeInsets.all(16),
      child: Column(
        children: [
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Image.asset(
                'assets/images/notepad.png',
                width: Get.width * .2,
              ),
              SizedBox(
                width: Get.width * .7,
                child: Text(
                  'Accept Ride\'s Terms & Review Privacy Notice'.tr,
                  style: AppStyle.headtitle2,
                ),
              ),
            ],
          ),
          const SizedBox(
            height: 30,
          ),
          RichText(
            text: TextSpan(
              text:
                  'By selecting "I Agree" below, I have reviewed and agree to the Terms of Use and acknowledge the ',
              style: AppStyle.title,
              children: <TextSpan>[
                TextSpan(
                    text: 'Privacy Notice',
                    style: const TextStyle(
                        decoration: TextDecoration.underline,
                        color: AppColor.blueColor),
                    recognizer: TapGestureRecognizer()
                      ..onTap = () {
                        Get.defaultDialog(
                            title: ''.tr,
                            content: const SizedBox(
                              height: 400,
                              width: 400,
                              child: SingleChildScrollView(
                                child: HtmlWidget(AppInformation.privacyPolicy),
                              ),
                            ));
                      }),
                const TextSpan(
                  text: '. I am at least 18 years of age.',
                ),
              ],
            ),
          ),
          const SizedBox(
            height: 100,
          ),
          GetBuilder<LoginController>(
            builder: (controller) => Column(
              children: [
                Row(
                  children: [
                    Checkbox.adaptive(
                      autofocus: true,
                      tristate: true,
                      splashRadius: 25,
                      activeColor: AppColor.primaryColor,
                      value: controller.isAgreeTerms,
                      onChanged: (value) => controller.changeAgreeTerm(),
                    ),
                    Text(
                      'I Agree'.tr,
                      style: controller.isAgreeTerms
                          ? AppStyle.title
                          : AppStyle.title
                              .copyWith(color: AppColor.accentColor),
                    ),
                  ],
                ),
                MyElevatedButton(
                    title: 'Submit'.tr,
                    onPressed: () => controller.saveAgreementTerms()),
              ],
            ),
          )
        ],
      ),
    );
  }
}
