import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/common_models/nationality_country_model.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/appbar/app_bar_widget.dart';
import 'package:hmg_patient_app_new/widgets/bottomsheet/generic_bottom_sheet.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart';
import 'package:hmg_patient_app_new/widgets/input_widget.dart';
import 'package:provider/provider.dart';

class RegisterNewStep2 extends StatefulWidget {
  var nHICData;
  var payload;

  RegisterNewStep2(this.nHICData, this.payload, {Key? key}) : super(key: key);

  @override
  _RegisterNew createState() => _RegisterNew();
}

class _RegisterNew extends State<RegisterNewStep2> {
  bool isFromDubai = true;
  AuthenticationViewModel? authVM;

  @override
  void initState() {
    super.initState();
    authVM = context.read<AuthenticationViewModel>();
    authVM!.loadCountriesData(context: context);
    // isFromDubai = widget.payload.zipCode!.contains("971") || widget.payload.zipCode!.contains("+971");
  }

  @override
  void dispose() {
    super.dispose();
    authVM!.clearDefaults();
  }

  @override
  Widget build(BuildContext context) {
    AppState appState = getIt.get<AppState>();
    return Scaffold(
      appBar: CustomAppBar(
        onBackPressed: () {
          Navigator.of(context).pop();
          authVM!.clearDefaults();
        },
        onLanguageChanged: (lang) {},
        hideLogoAndLang: true,
      ),
      body: SingleChildScrollView(
        reverse: false,
        padding: EdgeInsets.only(left: 24.h, right: 24.h, top: 24.h),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Directionality(
              textDirection: Directionality.of(context),
              child: Container(
                decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(24)),
                padding: EdgeInsets.only(left: 16.h, right: 16.h),
                child: Column(
                  children: [
                    TextInputWidget(
                            labelText: isFromDubai ? LocaleKeys.fullName.tr() : LocaleKeys.name.tr(),
                            hintText: isFromDubai ? "name" ?? "" : (widget.nHICData!.firstNameEn!.toUpperCase() + " " + widget.nHICData!.lastNameEn!.toUpperCase()),
                            controller: null,
                            isEnable: true,
                            prefix: null,
                            isAllowRadius: false,
                            isBorderAllowed: false,
                            keyboardType: TextInputType.text,
                            isAllowLeadingIcon: true,
                            isReadOnly: isFromDubai ? false : true,
                            leadingIcon: AppAssets.user_circle)
                        .paddingSymmetrical(0.h, 16.h),
                    Divider(height: 1, color: AppColors.greyColor),
                    TextInputWidget(
                            labelText: LocaleKeys.nationalIdNumber.tr(),
                            hintText: isFromDubai ? "widget.payload.nationalID!" : (widget.nHICData!.idNumber ?? ""),
                            controller: null,
                            isEnable: true,
                            prefix: null,
                            isAllowRadius: false,
                            isBorderAllowed: false,
                            isAllowLeadingIcon: true,
                            isReadOnly: true,
                            leadingIcon: AppAssets.student_card)
                        .paddingSymmetrical(0.h, 16.h),
                    Divider(height: 1, color: AppColors.greyColor),
                    isFromDubai
                        ? Selector<AuthenticationViewModel, GenderTypeEnum?>(
                            selector: (_, authViewModel) => authViewModel.genderType,
                            shouldRebuild: (previous, next) => previous != next,
                            builder: (context, genderType, child) {
                              final authVM = context.read<AuthenticationViewModel>();
                              return DropdownWidget(
                                labelText: LocaleKeys.gender.tr(),
                                hintText: LocaleKeys.malE.tr(),
                                isEnable: true,
                                dropdownItems: GenderTypeEnum.values.map((e) => appState.isArabic() ? e.typeAr : e.type).toList(),
                                selectedValue: genderType != null ? (appState.isArabic() ? genderType.typeAr : genderType.type) : "",
                                onChange: authVM.onGenderChange,
                                isBorderAllowed: false,
                                hasSelectionCustomIcon: true,
                                isAllowRadius: false,
                                padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0),
                                selectionCustomIcon: AppAssets.arrow_down,
                                leadingIcon: AppAssets.user_full,
                              ).withVerticalPadding(8);
                            })
                        : TextInputWidget(
                                labelText: LocaleKeys.gender.tr(),
                                hintText: (widget.nHICData!.gender ?? ""),
                                controller: null,
                                isEnable: true,
                                prefix: null,
                                isAllowRadius: false,
                                isBorderAllowed: false,
                                isAllowLeadingIcon: true,
                                isReadOnly: isFromDubai ? false : true,
                                leadingIcon: AppAssets.user_full,
                                onChange: (value) {})
                            .paddingSymmetrical(0.h, 16.h),
                    Divider(height: 1, color: AppColors.greyColor),
                    isFromDubai
                        ? Selector<AuthenticationViewModel, MaritalStatusTypeEnum?>(
                            selector: (_, authViewModel) => authViewModel.maritalStatus,
                            shouldRebuild: (previous, next) => previous != next,
                            builder: (context, maritalStatus, child) {
                              final authVM = context.read<AuthenticationViewModel>(); // For onChange
                              return DropdownWidget(
                                labelText: LocaleKeys.maritalStatus.tr(),
                                hintText: LocaleKeys.married.tr(),
                                isEnable: true,
                                dropdownItems: MaritalStatusTypeEnum.values.map((e) => appState.isArabic() ? e.typeAr : e.type).toList(),
                                selectedValue: maritalStatus != null ? (appState.isArabic() ? maritalStatus.typeAr : maritalStatus.type) : "",
                                onChange: authVM.onMaritalStatusChange,
                                isBorderAllowed: false,
                                hasSelectionCustomIcon: true,
                                isAllowRadius: false,
                                padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0),
                                selectionCustomIcon: AppAssets.arrow_down,
                                leadingIcon: AppAssets.smart_phone,
                              ).withVerticalPadding(8);
                            },
                          )
                        : TextInputWidget(
                                labelText: LocaleKeys.maritalStatus.tr(),
                                hintText: appState.isArabic()
                                    ? (MaritalStatusTypeExtension.fromValue(widget.nHICData!.maritalStatusCode)!.typeAr)
                                    : (MaritalStatusTypeExtension.fromValue(widget.nHICData!.maritalStatusCode)!.type),
                                isEnable: true,
                                prefix: null,
                                isAllowRadius: false,
                                isBorderAllowed: false,
                                isAllowLeadingIcon: true,
                                isReadOnly: true,
                                leadingIcon: AppAssets.smart_phone,
                                onChange: (value) {})
                            .paddingSymmetrical(0.h, 16.h),
                    Divider(height: 1, color: AppColors.greyColor),
                    isFromDubai
                        ? Selector<AuthenticationViewModel, ({List<NationalityCountries>? countriesList, NationalityCountries? selectedCountry, bool isArabic})>(
                            selector: (context, authViewModel) {
                              final appState = getIt.get<AppState>();
                              return (
                                countriesList: authViewModel.countriesList,
                                selectedCountry: authViewModel.pickedCountryByUAEUser,
                                isArabic: appState.isArabic(),
                              );
                            },
                            shouldRebuild: (previous, next) => previous.countriesList != next.countriesList || previous.selectedCountry != next.selectedCountry || previous.isArabic != next.isArabic,
                            builder: (context, data, child) {
                              final authVM = context.read<AuthenticationViewModel>();
                              return DropdownWidget(
                                labelText: LocaleKeys.country.tr(),
                                hintText: LocaleKeys.uae.tr(),
                                isEnable: true,
                                dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(),
                                selectedValue: data.selectedCountry != null
                                    ? data.isArabic
                                        ? data.selectedCountry!.nameN ?? ""
                                        : data.selectedCountry!.name ?? ""
                                    : "",
                                onChange: authVM.onUAEUserCountrySelection,
                                isBorderAllowed: false,
                                hasSelectionCustomIcon: true,
                                isAllowRadius: false,
                                padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0),
                                selectionCustomIcon: AppAssets.arrow_down,
                                leadingIcon: AppAssets.globe,
                              ).withVerticalPadding(8);
                            },
                          )
                        : TextInputWidget(
                                labelText: LocaleKeys.nationality.tr(),
                                hintText: appState.isArabic()
                                    ? (authVM!.countriesList!.firstWhere((e) => e.id == (widget.nHICData!.nationalityCode ?? ""), orElse: () => NationalityCountries()).nameN ?? "")
                                    : (authVM!.countriesList!.firstWhere((e) => e.id == (widget.nHICData!.nationalityCode ?? ""), orElse: () => NationalityCountries()).name ?? ""),
                                isEnable: true,
                                prefix: null,
                                isAllowRadius: false,
                                isBorderAllowed: false,
                                isAllowLeadingIcon: true,
                                isReadOnly: true,
                                leadingIcon: AppAssets.globe,
                                onChange: (value) {})
                            .paddingSymmetrical(0.h, 16.h),
                    Divider(
                      height: 1,
                      color: AppColors.greyColor,
                    ),
                    TextInputWidget(
                            labelText: LocaleKeys.mobileNumber.tr(),
                            hintText: ("widget.payload.mobileNo" ?? ""),
                            controller: authVM!.phoneNumberController,
                            isEnable: true,
                            prefix: null,
                            isAllowRadius: false,
                            isBorderAllowed: false,
                            isAllowLeadingIcon: true,
                            isReadOnly: true,
                            leadingIcon: AppAssets.call,
                            onChange: (value) {})
                        .paddingSymmetrical(0.h, 16.h),
                    Divider(
                      height: 1,
                      color: AppColors.greyColor,
                    ),
                    TextInputWidget(
                      labelText: LocaleKeys.dob.tr(),
                      hintText: isFromDubai ? "widget.payload.dob!" : (widget.nHICData!.dateOfBirth ?? ""),
                      controller: authVM!.dobController,
                      isEnable: true,
                      prefix: null,
                      isBorderAllowed: false,
                      isAllowLeadingIcon: true,
                      isReadOnly: true,
                      leadingIcon: AppAssets.birthday_cake,
                      selectionType: SelectionTypeEnum.calendar,
                    ).paddingSymmetrical(0.h, 16.h),
                  ],
                ),
              ),
            ),
            SizedBox(height: 50.h),
            Row(
              children: [
                Expanded(
                  child: CustomButton(
                    text: LocaleKeys.cancel.tr(),
                    icon: AppAssets.cancel,
                    onPressed: () {
                      Navigator.of(context).pop();
                      authVM!.clearDefaults();
                    },
                    backgroundColor: AppColors.secondaryLightRedColor,
                    borderColor: AppColors.secondaryLightRedColor,
                    textColor: AppColors.primaryRedColor,
                    iconColor: AppColors.primaryRedColor,
                  ),
                ),
                SizedBox(
                  width: 16,
                ),
                Expanded(
                  child: CustomButton(
                    backgroundColor: AppColors.lightGreenColor,
                    borderColor: AppColors.lightGreenColor,
                    textColor: AppColors.textGreenColor,
                    text: LocaleKeys.confirm.tr(),
                    icon: AppAssets.confirm,
                    iconColor: AppColors.textGreenColor,
                    onPressed: () {
                      // if (isFromDubai) {
                      //   if (name == null) {
                      //     AppToast.showErrorToast(message: LocaleKeys.enterFullName);
                      //     return;
                      //   }
                      //   if (!name!.contains(" ")) if (selectedGenderType == null) {
                      //     AppToast.showErrorToast(message: TranslationBase.of(context).enterFullName);
                      //     return;
                      //   }
                      //   if (selectedMaritalStatusType == null) {
                      //     AppToast.showErrorToast(message: TranslationBase.of(context).chooseMaritalStatus);
                      //     return;
                      //   }
                      //   if (selectedCountry == null) {
                      //     AppToast.showErrorToast(message: TranslationBase.of(context).chooseCountry);
                      //     return;
                      //   }
                      // }

                      showModel(context: context);
                    },
                  ),
                )
              ],
            ),
          ],
        ),
      ),
    );
  }

  void showModel({required BuildContext context}) {
    showModalBottomSheet(
      context: context,
      isScrollControlled: true,
      isDismissible: false,
      backgroundColor: Colors.transparent,
      builder: (bottomSheetContext) => Padding(
        padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom),
        child: SingleChildScrollView(
          child: GenericBottomSheet(
            textController: TextEditingController(),
            isForEmail: true,
            buttons: [
              Padding(
                padding: const EdgeInsets.only(bottom: 10),
                child: CustomButton(
                    text: LocaleKeys.submit,
                    onPressed: () {
                      // if (emailAddress.text.isEmpty) {
                      //   Utils.showErrorToast(TranslationBase.of(context).enterEmailAddress);
                      //   return;
                      // } else {
                      //   Navigator.of(context).pop();
                      //   registerNow();
                      // }
                    },
                    backgroundColor: AppColors.bgGreenColor,
                    borderColor: AppColors.bgGreenColor,
                    textColor: AppColors.whiteColor),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
