import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.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/models/dashboard/get_special_clinical_care_List_Respose_Model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/text_fields_utils.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import 'DischargedPatientPage.dart';
import 'InPatientPage.dart';

class PatientInPatientScreen extends StatefulWidget {
  GetSpecialClinicalCareListResponseModel specialClinic;

  PatientInPatientScreen({Key key, this.specialClinic});

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

class _PatientInPatientScreenState extends State<PatientInPatientScreen>
    with SingleTickerProviderStateMixin {
  TabController _tabController;
  int _activeTab = 0;

  int selectedMapId;


  @override
  void initState() {
    super.initState();
    _tabController = TabController(length: 3, vsync: this);
    _tabController.addListener(_handleTabSelection);
  }

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

  _handleTabSelection() {
    setState(() {
      _activeTab = _tabController.index;
    });
  }

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


    return BaseView<PatientSearchViewModel>(
      onModelReady: (model) async {
        model.clearPatientList();
        // if (widget.specialClinic != null) {
        //   await model.getSpecialClinicalCareMappingList(widget.specialClinic.clinicID);
        //   requestModel.nursingStationID =
        //       model.specialClinicalCareMappingList[0].nursingStationID;
        //   requestModel.clinicID = 0;
        // }
        model.getInPatientList(requestModel);
      },
      builder: (_, model, w) =>
          AppScaffold(
        baseViewModel: model,
        isShowAppBar: false,
        body: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Container(
              padding: EdgeInsets.only(left: 0, right: 5, bottom: 5, top: 5),
              decoration: BoxDecoration(
                color: Colors.white,
              ),
              child: Container(
                padding: EdgeInsets.only(left: 10, right: 10, bottom: 10),
                margin: EdgeInsets.only(top: 50),
                child: Row(children: [
                  IconButton(
                    icon: Icon(Icons.arrow_back_ios),
                    color: Colors.black, //Colors.black,
                    onPressed: () => Navigator.pop(context),
                  ),
                  Expanded(
                    child: AppText(
                      TranslationBase
                          .of(context)
                          .inPatient,
                      fontSize: SizeConfig.textMultiplier * 2.8,
                      fontWeight: FontWeight.bold,
                      color: Color(0xFF2B353E),
                    ),
                  ),
                  if (model.specialClinicalCareMappingList.isNotEmpty &&
                      widget.specialClinic != null &&
                      _activeTab != 2)
                    Container(
                      width: MediaQuery.of(context).size.width * .3,
                      child: DropdownButtonHideUnderline(
                          child: DropdownButton(
                        dropdownColor: Colors.white,
                        iconEnabledColor: Colors.black,
                        isExpanded: true,
                        value: selectedMapId == null ? model
                                .specialClinicalCareMappingList[0]
                                .nursingStationID : selectedMapId,
                            iconSize: 25,
                            elevation: 16,
                            selectedItemBuilder:
                                (BuildContext context) {
                              return model
                                  .specialClinicalCareMappingList
                                  .map((item) {
                                return Row(
                                  mainAxisSize: MainAxisSize.max,
                                  mainAxisAlignment:
                                  MainAxisAlignment.end,
                                  children: <Widget>[
                                    Column(
                                      mainAxisAlignment:
                                      MainAxisAlignment
                                          .center,
                                      children: [
                                        Container(
                                            padding:
                                            EdgeInsets.all(2),
                                            margin:
                                            EdgeInsets.all(2),
                                            decoration:
                                            new BoxDecoration(
                                              color:
                                              Colors.red[800],
                                              borderRadius:
                                              BorderRadius
                                                  .circular(
                                                  20),
                                            ),
                                            constraints:
                                            BoxConstraints(
                                              minWidth: 20,
                                              minHeight: 20,
                                            ),
                                            child: Center(
                                              child: AppText(
                                                model
                                                    .specialClinicalCareMappingList
                                                    .length
                                                    .toString(),
                                                color:
                                                Colors.white,
                                                fontSize:
                                                projectsProvider
                                                    .isArabic
                                                    ? 10
                                                    : 11,
                                                textAlign:
                                                TextAlign
                                                    .center,
                                              ),
                                            )),
                                      ],
                                    ),
                                    AppText(item.description,
                                        fontSize: 12,
                                        color: Colors.black,
                                        fontWeight:
                                        FontWeight.bold,
                                        textAlign: TextAlign.end),
                                  ],
                                );
                              }).toList();
                            },
                            onChanged: (newValue) async {
                              setState(() {
                                selectedMapId = newValue;
                              });
                              model.clearPatientList();
                              GifLoaderDialogUtils.showMyDialog(
                                  context);

                              PatientSearchRequestModel requestModel = PatientSearchRequestModel(
                                  nursingStationID: selectedMapId, clinicID: 0);
                              await model.getInPatientList(requestModel, isLocalBusy: true);
                              GifLoaderDialogUtils.hideDialog(
                                  context);
                              if (model.state ==
                                  ViewState.ErrorLocal) {
                                DrAppToastMsg.showErrorToast(
                                    model.error);
                              }
                            },
                            items: model
                                .specialClinicalCareMappingList
                                .map((item) {
                              return DropdownMenuItem(
                                child: AppText(
                                  item.description,
                                  textAlign: TextAlign.left,
                                ),
                                value: item.nursingStationID,
                              );
                            }).toList(),
                          )),
                    )
                ]),
              ),
            ),
            Expanded(
              child: Scaffold(
                extendBodyBehindAppBar: true,
                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: Center(
                      child: TabBar(
                        isScrollable: false,
                        controller: _tabController,
                        indicatorColor: Colors.transparent,
                        indicatorWeight: 1.0,
                        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,
                              counter: model.inPatientList.length),
                          tabWidget(
                              screenSize, _activeTab == 1, "My InPatients",
                              counter: model.myIinPatientList.length),
                          tabWidget(screenSize, _activeTab == 2,
                              TranslationBase.of(context).discharged),
                        ],
                      ),
                    ),
                  ),
                ),
                body: Column(
                  children: [
                    Expanded(
                      child: TabBarView(
                        physics: BouncingScrollPhysics(),
                        controller: _tabController,
                        children: [
                          InPatientPage(false),
                          InPatientPage(true),
                          DischargedPatient(),
                        ],
                      ),
                    ),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }

  Widget tabWidget(Size screenSize, bool isActive, String title,
      {int counter = -1}) {
    return Center(
      child: Container(
        height: screenSize.height * 0.070,
        decoration: TextFieldsUtils.containerBorderDecoration(
            isActive ? Color(0xFFD02127 /*B8382B*/) : Color(0xFFEAEAEA),
            isActive ? Color(0xFFD02127) : Color(0xFFEAEAEA),
            borderRadius: 4,
            borderWidth: 0),
        child: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            AppText(
              title,
              fontSize: SizeConfig.textMultiplier * 1.5,
              color: isActive ? Colors.white : Color(0xFF2B353E),
              fontWeight: FontWeight.w700,
            ),
            if (counter != -1)
              Container(
                margin: EdgeInsets.all(4),
                width: 15,
                height: 15,
                decoration: BoxDecoration(
                  color: isActive ? Colors.white : Color(0xFFD02127),
                  shape: BoxShape.circle,
                ),
                child: Center(
                  child: FittedBox(
                    child: AppText(
                      "$counter",
                      fontSize: SizeConfig.textMultiplier * 1.5,
                      color: !isActive ? Colors.white : Color(0xFFD02127),
                      fontWeight: FontWeight.w700,
                    ),
                  ),
                ),
              ),
          ],
        ),
      ),
    );
  }
}
