import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart';
import 'package:doctor_app_flutter/models/patient/progress_note_request.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart';
import 'package:doctor_app_flutter/widgets/shared/rounded_container_widget.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';

import '../../../config/shared_pref_kay.dart';
import '../../../config/size_config.dart';
import '../../../models/patient/patiant_info_model.dart';
import '../../../util/dr_app_shared_pref.dart';
import '../../../widgets/shared/app_scaffold_widget.dart';
import '../../../widgets/shared/app_texts_widget.dart';

DrAppSharedPreferances sharedPref = new DrAppSharedPreferances();

/*
 *@author: ibrahim albitar
 *@Date:21/5/2020
 *@param:
 *@return:
 *@desc:
 */

class PatientsOrdersScreen extends StatefulWidget {
  @override
  _PatientsOrdersState createState() => _PatientsOrdersState();
}

class _PatientsOrdersState extends State<PatientsOrdersScreen> {
  var notesList;
  var filteredNotesList;
  final _controller = TextEditingController();
  var _isInit = true;

  /*
 *@author: ibrahim al bitar
 *@Date:21/5/2020
 *@param:
 *@return:
 *@desc:
 */
  getProgressNoteList(BuildContext context, PatientViewModel model ) async {
    final routeArgs = ModalRoute.of(context).settings.arguments as Map;
    PatiantInformtion patient = routeArgs['patient'];
    String token = await sharedPref.getString(TOKEN);
    String type = await sharedPref.getString(SLECTED_PATIENT_TYPE);

    print(type);
    ProgressNoteRequest progressNoteRequest = ProgressNoteRequest(
        visitType: 3, // if equal 3 then this will return orders
        admissionNo: int.parse(patient.admissionNo),
        projectID: patient.projectId,
        tokenID: token,
        patientTypeID: patient.patientType,
        languageID: 2);
    model.getPatientProgressNote(progressNoteRequest.toJson()).then((c){
      notesList = model.patientProgressNoteList;
    });
  }


  @override
  Widget build(BuildContext context) {
    return BaseView<PatientViewModel>(
      onModelReady: (model) => getProgressNoteList(context, model),
      builder: (_, model, w) => AppScaffold(
        baseViewModel: model,
        appBarTitle: TranslationBase.of(context).orders,
      body:  notesList == null || notesList.length == 0
                  ? DrAppEmbeddedError(
                      error: TranslationBase.of(context).errorNoOrders)
                  : Column(
                      children: <Widget>[
                        Container(
                          margin: EdgeInsets.all(10),
                          width: SizeConfig.screenWidth * 0.80,
                          child: TextField(
                            controller: _controller,
                            onChanged: (String str) {
                              this.searchData(str, model);
                            },
                            textInputAction: TextInputAction.done,
                            decoration: buildInputDecoration(context,
                                TranslationBase.of(context).searchOrders),
                          ),
                        ),
                        Expanded(
                          child: Container(
                            margin: EdgeInsets.fromLTRB(
                                SizeConfig.realScreenWidth * 0.05,
                                0,
                                SizeConfig.realScreenWidth * 0.05,
                                0),
                            child: ListView.builder(
                                itemCount: notesList.length,
                                itemBuilder: (BuildContext ctxt, int index) {
                                  return RoundedContainer(
                                      backgroundColor: Colors.white,
                                      child: Column(
                                        crossAxisAlignment:
                                            CrossAxisAlignment.start,
                                        children: <Widget>[
                                          ExpansionTile(
                                            title: Container(
                                              child: Column(
                                                crossAxisAlignment:
                                                    CrossAxisAlignment.start,
                                                children: <Widget>[
                                                  AppText(
                                                    notesList[index]
                                                        ["DoctorName"],
                                                    marginTop: 10,
                                                    marginLeft: 10,
                                                    marginBottom: 5,
                                                    fontWeight: FontWeight.bold,
                                                  ),
                                                  AppText(
                                                        notesList[index]
                                                        ["AdmissionNo"],
                                                    marginLeft: 10,
                                                    color: Colors.grey[600],
                                                  ),
                                                  AppText(
                                                    convertDateFormat(
                                                        notesList[index]
                                                            ["AssessmentDate"]),
                                                    marginLeft: 10,
                                                    color: Colors.grey[600],
                                                  ),
                                                ],
                                              ),
                                            ),
                                            children: <Widget>[
                                        Divider(
                                          color: Colors.black,
                                          height: 20,
                                          thickness: 1,
                                          indent: 0,
                                          endIndent: 0,
                                        ),
                                        Row(
                                          mainAxisAlignment:
                                              MainAxisAlignment.start,
                                          children: [
                                            AppText(
                                              notesList[index]["Notes"],
                                              margin: 5,
                                            ),
                                          ],
                                        )
                                      ],
                                          ),
                                        ],
                                      ));
                                }),
                          ),
                        ),
                      ],
                    ),
    ),);
  }

  InputDecoration buildInputDecoration(BuildContext context, hint) {
    return InputDecoration(
        prefixIcon: Icon(Icons.search, color: Colors.black),
        filled: true,
        fillColor: Colors.white,
        hintText: hint,
        hintStyle: TextStyle(fontSize: 2 * SizeConfig.textMultiplier),
        enabledBorder: OutlineInputBorder(
          borderRadius: BorderRadius.all(Radius.circular(20)),
          borderSide: BorderSide(color: HexColor('#CCCCCC')),
        ),
        focusedBorder: OutlineInputBorder(
          borderRadius: BorderRadius.all(Radius.circular(50.0)),
          borderSide: BorderSide(color: Colors.grey), //),
        ));
  }

  searchData(String str, PatientViewModel model) {
    var strExist = str.length > 0 ? true : false;

    if (strExist) {
      filteredNotesList = null;
      filteredNotesList = notesList
          .where((note) =>
              note["DoctorName"].toString().contains(str.toUpperCase()))
          .toList();
      setState(() {
        notesList = filteredNotesList;
      });
    } else {
      setState(() {
        notesList = model.patientProgressNoteList;
      });
    }
  }

  convertDateFormat(String str) {
    const start = "/Date(";
    const end = "+0300)";

    final startIndex = str.indexOf(start);
    final endIndex = str.indexOf(end, startIndex + start.length);

    var date = new DateTime.fromMillisecondsSinceEpoch(
        int.parse(str.substring(startIndex + start.length, endIndex)));
    String newDate = date.year.toString() +
        "-" +
        date.month.toString().padLeft(2, '0') +
        "-" +
        date.day.toString().padLeft(2, '0');

    return newDate.toString();
  }
}
