import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/enum/view_state.dart';
import 'package:doctor_app_flutter/core/model/dashboard/get_special_clinical_care_List_Respose_Model.dart';
import 'package:doctor_app_flutter/core/model/patient_muse/PatientSearchRequestModel.dart';
import 'package:doctor_app_flutter/core/viewModel/PatientSearchViewModel.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/In_patient/InPatientHeader.dart';
import 'package:doctor_app_flutter/utils/date-utils.dart';
import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/utils/tab_utils.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/utils/utils.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import '../DischargedPatientPage.dart';
import 'in_patient_list_page.dart';

class InPatientScreen extends StatefulWidget {
  GetSpecialClinicalCareListResponseModel? specialClinic;

  bool isAllClinic = true;
  bool showBottomSheet = false;
  String selectedClinicName = "";

  InPatientScreen({Key? key, required this.specialClinic});

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

class _InPatientScreenState extends State<InPatientScreen> with SingleTickerProviderStateMixin {
  late TabController _tabController;
  ProjectViewModel? viewModel = null;
  int _activeTab = 0;
  int selectedMapId = 0;
  bool isVidaPlusProject = false;
  @override
  void initState() {
    super.initState();
    _tabController = TabController(length: 3, vsync: this);
    _tabController.addListener(_handleTabSelection);
  }

  @override
  void dispose() {
    super.dispose();
    _tabController.dispose();
  }

  _handleTabSelection() {
    Utils.hideKeyboard(context);
    setState(() {
      widget.showBottomSheet = false;
      _activeTab = _tabController.index;
    });
  }

  @override
  Widget build(BuildContext context) {
    final screenSize = MediaQuery.of(context).size;
    viewModel = Provider.of<ProjectViewModel>(context);
    PatientSearchRequestModel requestModel = PatientSearchRequestModel();

    return BaseView<PatientSearchViewModel>(
      onModelReady: (model) async {
        model.noDataFoundText = TranslationBase.of(context).noDataAvailable;
        model.clearPatientList();
        var doctorProfile = await model.getDoctorProfile();
        if (widget.specialClinic != null && widget.specialClinic!.clinicID != null) {
          print(widget.specialClinic!.toJson());
          await model.getSpecialClinicalCareMappingList(widget.specialClinic!.clinicID);
          // requestModel.nursingStationID =
          //     model.specialClinicalCareMappingList[0].nursingStationID;
        }
        requestModel.clinicID = 0;
        isVidaPlusProject =
            Utils.isVidaPlusProject(viewModel!, doctorProfile.projectID ?? -1);
        if (isVidaPlusProject) {
          requestModel.transformDataForVidaPlus();
          DateTime dateTime = DateTime.now();
          String currentDate = AppDateUtils.convertDateToFormat(
              dateTime,
              'yyyy-MM-dd');
          print("the current date is $currentDate");
          requestModel.from = "$currentDate 00:00:00";

          dateTime = dateTime.add(Duration(days: 1));
          currentDate = AppDateUtils.convertDateToFormat(
              dateTime,
              'yyyy-MM-dd');
          requestModel.to = "$currentDate 00:00:00";
          requestModel.pageSize = 10;
          requestModel.pageIndex = 0;
          requestModel.searchType = null;
          requestModel.transformDataForVidaPlus();
        }
        await model.getInPatientList(requestModel,
            isVidaPlusProject: isVidaPlusProject);
      },
      builder: (_, model, w) => AppScaffold(
        baseViewModel: model,
        isShowAppBar: true,
        appBar: InPatientHeader(
            model: model,
            selectedMapId: selectedMapId,
            specialClinic: widget.specialClinic!,
            activeTab: _activeTab,
            onChangeFunc: (newValue) async {
              setState(() {
                selectedMapId = newValue;
              });
              model.clearPatientList();
              GifLoaderDialogUtils.showMyDialog(context);

              PatientSearchRequestModel requestModel = PatientSearchRequestModel(nursingStationID: selectedMapId, clinicID: 0);
              if (isVidaPlusProject) {
                requestModel.transformDataForVidaPlus();
              }
              await model.getInPatientList(requestModel,
                  isLocalBusy: true,
                  isVidaPlusProject: Utils.isVidaPlusProject(
                      Provider.of<ProjectViewModel>(context),
                      requestModel.projectID ?? -1));
              GifLoaderDialogUtils.hideDialog(context);
              if (model.state == ViewState.ErrorLocal) {
                DrAppToastMsg.showErrorToast(model.error);
              } else {
                onChangeState(isAllClinic: true, showBottomSheet: false, selectedClinicName: null);
              }
            }),
        body: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Expanded(
              child: Scaffold(
                extendBodyBehindAppBar: false,
                appBar: PreferredSize(
                  preferredSize: Size.fromHeight(MediaQuery.of(context).size.height * 0.070),
                  child: Container(
                    height: MediaQuery.of(context).size.height * 0.070,
                    decoration: BoxDecoration(
                        border: Border(
                          bottom: BorderSide(color: Theme.of(context).dividerColor, width: 0.5), //width: 0.7
                        ),
                        color: Colors.white),
                    child: Container(
                      margin: EdgeInsets.only(top: 9),
                      color: TabUtils.getBgTabColor(),
                      child: TabBar(
                        isScrollable: false,
                        controller: _tabController,
                        indicatorColor: AppGlobal.appRedColor,
                        indicatorWeight: 0.001,
                        indicator: BoxDecoration(),
                        // indicatorSize: TabBarIndicatorSize.tab,
                        // labelColor: Theme.of(context).primaryColor,
                        labelPadding: EdgeInsets.only(top: 0, left: 0, right: 0, bottom: 0),
                        // unselectedLabelColor: Colors.grey[800],
                        tabs: [
                          tabWidget(screenSize, _activeTab == 0, TranslationBase.of(context).inPatientAll, context: context, counter: model.mainList.length, isFirst: true),
                          tabWidget(
                            screenSize,
                            _activeTab == 1,
                            TranslationBase.of(context).myInPatientTitle,
                            counter: model.filteredMyInPatientItems.length,
                            isMiddle: true,
                            context: context,
                          ),
                          tabWidget(
                            screenSize,
                            _activeTab == 2,
                            TranslationBase.of(context).discharged,
                            isLast: true,
                            context: context,
                          ),
                        ],
                      ),
                    ),
                  ),
                ),
                body: Column(
                  children: [
                    Expanded(
                      child: TabBarView(
                        physics: BouncingScrollPhysics(),
                        controller: _tabController,
                        children: [
                          InPatientListPage(
                              isMyInPatient: false,
                              patientSearchViewModel: model,
                              isAllClinic: widget.isAllClinic,
                              showBottomSheet: widget.showBottomSheet,
                              selectedClinicName: widget.selectedClinicName,
                            onChangeValue: onChangeState,
                            isVidaPlusProject: isVidaPlusProject,
                          ),
                          InPatientListPage(
                              isMyInPatient: true,
                              patientSearchViewModel: model,
                              isAllClinic: widget.isAllClinic,
                              showBottomSheet: widget.showBottomSheet,
                              selectedClinicName: widget.selectedClinicName,
                            onChangeValue: onChangeState,
                            isVidaPlusProject: isVidaPlusProject,
                          ),
                          DischargedPatient(
                            isVidaPlusProject: isVidaPlusProject,
                          ),
                        ],
                      ),
                    ),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }

  onChangeState({isAllClinic, showBottomSheet, selectedClinicName}) {
    setState(() {
      widget.isAllClinic = isAllClinic;
      widget.showBottomSheet = showBottomSheet;
      widget.selectedClinicName = selectedClinicName??"";
    });
  }

  Widget tabWidget(
    Size screenSize,
    bool isActive,
    String title, {
    int counter = -1,
    bool isFirst = false,
    bool isMiddle = false,
    bool isLast = false,
    BuildContext? context,
  }) {
    ProjectViewModel projectsProvider = Provider.of<ProjectViewModel>(context!);

    return Container(
      color: Colors.yellow,
      child: Center(
        child: Container(
          height: TabUtils.getTabHeight(context),
          decoration: TabUtils.getBoxTabsBoxDecoration(
            isActive: isActive,
            isFirst: isFirst,
            isMiddle: isMiddle,
            isLast: isLast,
            projectViewModel: projectsProvider,
          ),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              TabUtils.getTabText(title: title, isActive: isActive),
              if (counter != -1)
                TabUtils.getTabCounter(
                  isActive: isActive,
                  counter: counter,
                ),
            ],
          ),
        ),
      ),
    );
  }
}
