import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/patient_type.dart';
import 'package:doctor_app_flutter/core/model/PatientSearchRequestModel.dart';
import 'package:doctor_app_flutter/core/viewModel/PatientSearchViewModel.dart';
import 'package:doctor_app_flutter/core/viewModel/auth_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/models/patient/patient_model.dart';
import 'package:doctor_app_flutter/routes.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/patient_search/header.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/PatientCard.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/app_text_form_field.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/text_fields_utils.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';

// ignore: must_be_immutable
class PatientsScreenNew extends StatefulWidget {
  final patientSearchForm;
  final selectedType;
  final isAppbar;
  final arrivalType;
  final isView;
  final PatientType selectedPatientType;
  final PatientSearchRequestModel patientSearchRequestModel;
  final bool isSearchWithKeyInfo;
  final bool isSearch;
  final bool isInpatient;
  final String searchKey;


  PatientsScreenNew(
      {this.patientSearchForm,
      this.selectedType,
      this.isAppbar = true,
      this.arrivalType,
      this.isView,
      this.selectedPatientType,
      this.patientSearchRequestModel,
      this.isSearchWithKeyInfo = true,
      this.isSearch = false,
      this.isInpatient = false, this.searchKey});

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

class _PatientsScreenNewState extends State<PatientsScreenNew> {
  int clinicId;
  AuthViewModel authProvider;

  List<String> _locations = []; //['All', 'Today', 'Tomorrow', 'Next Week'];

  int _activeLocation = 0;
  String patientType;
  String patientTypeTitle;
  var selectedFilter = 1;
  String arrivalType;
  ProjectViewModel projectsProvider;
  var isView;
  final _controller = TextEditingController();

  PatientModel patient;


  @override
  Widget build(BuildContext context) {
    authProvider = Provider.of(context);
    _locations = [
      TranslationBase.of(context).today,
      TranslationBase.of(context).tomorrow,
      TranslationBase.of(context).nextWeek,
    ];
    final screenSize = MediaQuery.of(context).size;


    return BaseView<PatientSearchViewModel>(
      onModelReady: (model) async {
        if(!widget.isSearchWithKeyInfo  && widget.selectedPatientType == PatientType.OutPatient) {
          await model.getOutPatient(widget.patientSearchRequestModel);

        } else {
          await model.getPatientFileInformation(widget.patientSearchRequestModel);

        }
      },
      builder: (_, model, w) => AppScaffold(
        appBarTitle: "Search Patient",
        isShowAppBar: true,
        appBar: !widget.isSearch && !widget.isInpatient?HeaderInSearch(
          title: "My Out patient",
        ):HeaderInSearch(
          title: "Search for ${widget.searchKey}",
        ),
        baseViewModel: model,
        body: Container(
          color: Colors.grey[200],
          child: ListView(
            scrollDirection: Axis.vertical,
            children: <Widget>[
              Container(
                child: Column(
                  children: <Widget>[
                    if(!widget.isInpatient)
                      Container(
                        // color: Colors.red,
                        height: screenSize.height * 0.070,
                        decoration: TextFieldsUtils
                            .containerBorderDecoration(
                            Color(0Xffffffff),
                            Color(0xFFCCCCCC),
                            borderRadius: 4,
                            borderWidth: 0),
                        child: Row(
                          mainAxisSize: MainAxisSize.max,
                          crossAxisAlignment: CrossAxisAlignment.center,
                          children: _locations.map((item) {
                            bool _isActive = _locations[_activeLocation] == item
                                ? true
                                : false;

                            return Expanded(
                              child: InkWell(
                                onTap: () async {
                                  setState(() {
                                    _activeLocation = _locations.indexOf(item);
                                  });
                                  GifLoaderDialogUtils.showMyDialog(context);
                                  await model.getPatientBasedOnDate(item: item,
                                      selectedPatientType: widget.selectedPatientType,
                                      patientSearchRequestModel: widget
                                          .patientSearchRequestModel,
                                      isSearchWithKeyInfo: widget.isSearchWithKeyInfo);
                                  GifLoaderDialogUtils.hideDialog(context);
                                },
                                child: 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: Center(
                                      child: AppText(
                                        item,
                                        fontSize: SizeConfig.textMultiplier * 1.8,
                                        color: _isActive ? Colors.white : Color(0xFF2B353E),
                                        fontWeight: FontWeight.w700,
                                      ),
                                    ),
                                  ),
                                ),
                              ),
                            );
                          }).toList(),
                        ),
                      ),

                    SizedBox(height: 18.5),
                    Container(
                        width: SizeConfig.screenWidth * 0.9,
                        height: 75,
                        decoration: BoxDecoration(
                            borderRadius: BorderRadius.all(
                                Radius.circular(6.0)),
                            border: Border.all(
                              width: 1.0,
                              color: HexColor("#CCCCCC"),
                            ),
                            color: Colors.white),
                        child: Column(
                            crossAxisAlignment:
                            CrossAxisAlignment.start,
                            children: [
                              Padding(
                                  padding: EdgeInsets.only(
                                      left: 10, top: 10),
                                  child: AppText(
                                    TranslationBase.of(
                                        context)
                                        .searchPatientName,
                                    fontSize: 13,
                                  )),
                              AppTextFormField(
                                // focusNode: focusProject,
                                  controller: _controller,
                                  borderColor: Colors.white,
                                  prefix: IconButton(
                                    icon: Icon(
                                      DoctorApp.filter_1,
                                      color: Colors.black,
                                    ),
                                    iconSize: 20,
                                    padding:
                                    EdgeInsets.only(
                                        bottom: 30),
                                  ),
                                  onChanged: (String str) {
                                   model.searchData(str);
                                  }),
                            ])),
                    SizedBox(
                      height: 10.0,
                    ),
                    SizedBox(
                      height: 10.0,
                    ),
                    Container(
                        child: model.patientList.isNotEmpty
                            ? Column(
                          //  mainAxisAlignment: MainAxisAlignment.center,
                          children: model.filterData
                              .map((PatiantInformtion
                          item) {
                            return PatientCard(
                              patientInfo: item,
                              patientType:
                              patientType,
                              arrivalType:
                              arrivalType,
                              isInpatient:
                              widget.isInpatient,
                              onTap: () {
                                // TODO change the parameter to daynamic
                                Navigator.of(context)
                                    .pushNamed(
                                    PATIENTS_PROFILE,
                                    arguments: {
                                      "patient": item,
                                      "patientType":
                                      "1",
                                      "from": widget.patientSearchRequestModel.from,
                                      "to": widget.patientSearchRequestModel.from,
                                      "isSearch":
                                      widget.isSearch,
                                      "isInpatient":
                                      widget.isInpatient,
                                      "arrivalType":
                                      "7",
                                    });
                              },
                            );
                          }).toList(),
                        )
                            : Center(
                          child: Column(
                            crossAxisAlignment:
                            CrossAxisAlignment
                                .center,
                            children: [
                              SizedBox(
                                height: 100,
                              ),
                              Image.asset(
                                  'assets/images/no-data.png'),
                              Padding(
                                padding:
                                const EdgeInsets
                                    .all(8.0),
                                child: AppText(
                                    TranslationBase.of(
                                        context)
                                        .youDontHaveAnyPatient),
                              )
                            ],
                          ),
                        )),
                  ],
                ),
              )
            ],
          ),
        )
      ),
    );
  }
}
