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/patient_muse/PatientSearchRequestModel.dart';
import 'package:doctor_app_flutter/core/viewModel/PatientSearchViewModel.dart';
import 'package:doctor_app_flutter/core/viewModel/authentication_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/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/patient_search_header.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/patient_card/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/errors/error_message.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app_text_form_field.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
import 'package:provider/provider.dart';

// ignore: must_be_immutable
class PatientsSearchResultScreen extends StatefulWidget {
  final PatientType selectedPatientType;
  final PatientSearchRequestModel patientSearchRequestModel;
  final bool isSearchWithKeyInfo;
  final bool isSearch;
  final bool isInpatient;
  final bool isSearchAndOut;
  final String searchKey;

  PatientsSearchResultScreen(
      {this.selectedPatientType,
      this.patientSearchRequestModel,
      this.isSearchWithKeyInfo = true,
      this.isSearch = false,
      this.isInpatient = false,
      this.searchKey,
      this.isSearchAndOut = false});

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

class _PatientsSearchResultScreenState
    extends State<PatientsSearchResultScreen> {
  int clinicId;
  AuthenticationViewModel authenticationViewModel;

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

  PatientModel patient;

  @override
  Widget build(BuildContext context) {
    authenticationViewModel = Provider.of(context);
    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: PatientSearchHeader(
            title: "Search for ${widget.searchKey}",
          ),
          baseViewModel: model,
          body: Column(
            children: [
              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,
              ),
              Expanded(
                child: Container(
                    child: model.filterData.isEmpty
                        ? Center(
                            child: ErrorMessage(
                              error: TranslationBase.of(context)
                                  .youDontHaveAnyPatient,
                            ),
                          )
                        : ListView.builder(
                            scrollDirection: Axis.vertical,
                            shrinkWrap: true,
                            itemCount: model.filterData.length,
                            itemBuilder: (BuildContext ctxt, int index) {
                              return Padding(
                                padding: EdgeInsets.all(8.0),
                                child: PatientCard(
                                  patientInfo: model.filterData[index],
                                  patientType: patientType,
                                  arrivalType: arrivalType,
                                  isFromSearch: widget.isSearchAndOut,
                                  isInpatient: widget.isInpatient,
                                  onTap: () {
                                    // TODO change the parameter to daynamic
                                    Navigator.of(context).pushNamed(
                                        PATIENTS_PROFILE,
                                        arguments: {
                                          "patient": model.filterData[index],
                                          "patientType": "1",
                                          "from": widget
                                              .patientSearchRequestModel.from,
                                          "to": widget
                                              .patientSearchRequestModel.from,
                                          "isSearch": widget.isSearch,
                                          "isInpatient": widget.isInpatient,
                                          "arrivalType": "7",
                                          "isSearchAndOut":
                                              widget.isSearchAndOut,
                                        });
                                  },
                                  // isFromSearch: widget.isSearch,
                                ),
                              );
                            })),
              ),
            ],
          )),
    );
  }
}
