import 'dart:convert';

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_export.dart';
import 'package:hmg_patient_app_new/core/app_state.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/validation_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/features/medical_file/medical_file_view_model.dart';
import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/my_family/widget/family_cards.dart';
import 'package:hmg_patient_app_new/services/dialog_service.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import 'package:hmg_patient_app_new/widgets/dropdown/country_dropdown_widget.dart';
import 'package:hmg_patient_app_new/widgets/input_widget.dart';
import 'package:provider/provider.dart';

class FamilyMedicalScreen extends StatefulWidget {
  final List<FamilyFileResponseModelLists> profiles;
  final Function(FamilyFileResponseModelLists) onSelect;

  const FamilyMedicalScreen({
    super.key,
    required this.profiles,
    required this.onSelect,
  });

  @override
  State<FamilyMedicalScreen> createState() => _FamilyMedicalScreenState();
}

class _FamilyMedicalScreenState extends State<FamilyMedicalScreen> {
  MedicalFileViewModel? medicalVM;

  @override
  void initState() {
    super.initState();
    medicalVM = context.read<MedicalFileViewModel>();
  }

  @override
  Widget build(BuildContext context) {
    AppState appState = getIt.get<AppState>();

    return CollapsingListView(
      title: "Medical Files".needTranslation,
      bottomChild: appState.getAuthenticatedUser()!.isParentUser!
          ? Container(
              decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
                color: AppColors.whiteColor,
                customBorder: BorderRadius.only(topLeft: Radius.circular(24), topRight: Radius.circular(24)),
              ),
              padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 20.h),
              child: CustomButton(
                  text: "Add a new family member".needTranslation,
                  onPressed: () {
                    DialogService dialogService = getIt.get<DialogService>();
                    dialogService.showAddFamilyFileSheet(
                        label: "Add Family Member".needTranslation,
                        message: "Please fill the below field to add a new family member to your profile".needTranslation,
                        onVerificationPress: () {
                          medicalVM!.addFamilyFile(otpTypeEnum: OTPTypeEnum.sms);
                        });
                  },
                  icon: AppAssets.add_icon,
                  height: 56.h,
                  fontSize: 16,
                  borderRadius: 12.h,
                  fontWeight: FontWeight.w500))
          : SizedBox(),
      child: Column(
        mainAxisSize: MainAxisSize.min,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          appState.isChildLoggedIn
              ? SizedBox()
              : CustomTabBar(
                  activeBackgroundColor: AppColors.secondaryLightRedColor,
                  activeTextColor: AppColors.primaryRedColor,
                  tabs: [CustomTabBarModel(null, LocaleKeys.family.tr()), CustomTabBarModel(null, LocaleKeys.request.tr())],
                  onTabChange: (index) {
                    medicalVM!.onFamilyFileTabChange(index);
                  },
                ),
          appState.isChildLoggedIn ? SizedBox() : SizedBox(height: 25.h),
          Selector<MedicalFileViewModel, int>(selector: (_, model) => model.getSelectedFamilyFileTabIndex, builder: (context, selectedIndex, child) => getFamilyTabs(index: selectedIndex)),
          SizedBox(height: 20.h),
        ],
      ).paddingSymmetrical(20, 0),
    );
  }

  Widget getFamilyTabs({required int index}) {
    switch (index) {
      case 0:
        return FamilyCards(
          profiles: medicalVM!.patientFamilyFiles,
          onSelect: (FamilyFileResponseModelLists profile) {
            medicalVM!.switchFamilyFiles(responseID: profile.responseId, patientID: profile.patientId, phoneNumber: profile.mobileNumber);
          },
          onRemove: (FamilyFileResponseModelLists profile) {
            medicalVM!.removeFileFromFamilyMembers(id: profile.id);
          },
          isLeftAligned: true,
          isShowDetails: true,
          isShowRemoveButton: true,
        );
      case 1:
        return FamilyCards(
          profiles: medicalVM!.pendingFamilyFiles,
          isRequestDesign: true,
          onSelect: (FamilyFileResponseModelLists profile) {
            medicalVM!.acceptRejectFileFromFamilyMembers(id: profile.id, status: 3);
          },
          onRemove: (FamilyFileResponseModelLists profile) {
            medicalVM!.acceptRejectFileFromFamilyMembers(id: profile.id, status: 4);
          },
          isShowDetails: true,
        );
      default:
        return SizedBox.shrink();
    }
  }
}
