import 'package:doctor_app_flutter/client/base_app_client.dart';
import 'package:doctor_app_flutter/config/config.dart';
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/procedure/post_procedure_req_model.dart';
import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/procedure_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/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/patients/profile/patient_profile_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/Text.dart';
import 'package:doctor_app_flutter/widgets/shared/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_text_form_field.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';

class ProcedureScreen extends StatefulWidget {
  @override
  _ProcedureScreenState createState() => _ProcedureScreenState();
}

class _ProcedureScreenState extends State<ProcedureScreen> {
  int testNum = 1;
  PatiantInformtion patient;
  TextEditingController procedureController = TextEditingController();
  @override
  Widget build(BuildContext context) {
    final routeArgs = ModalRoute.of(context).settings.arguments as Map;
    patient = routeArgs['patient'];
    return BaseView<ProcedureViewModel>(
      onModelReady: (model) => model.getProcedure(),
      builder: (BuildContext context, ProcedureViewModel model, Widget child) =>
          AppScaffold(
              isShowAppBar: true,
              appBarTitle: 'ORDER PROCEDURE',
              body: NetworkBaseView(
                baseViewModel: model,
                child: SingleChildScrollView(
                  child: Container(
                    child: Column(
                      children: [
                        Padding(
                          padding: EdgeInsets.all(12.0),
                          child: Row(
                            children: <Widget>[
                              AvatarWidget(
                                Icon(
                                  patient.genderDescription == "Male"
                                      ? DoctorApp.male
                                      : DoctorApp.female_icon,
                                  size: 70,
                                  color: Colors.white,
                                ),
                              ),
                              SizedBox(
                                width: 20,
                              ),
                              Column(
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: [
                                  AppText(
                                    patient.firstName + ' ' + patient.lastName,
                                    color: Colors.black,
                                    fontWeight: FontWeight.bold,
                                  ),
                                  Row(
                                    children: [
                                      AppText(
                                        TranslationBase.of(context).fileNo,
                                        color: Colors.black,
                                        fontWeight: FontWeight.bold,
                                      ),
                                      SizedBox(
                                        width: 5.0,
                                      ),
                                      AppText(
                                        patient.patientId.toString(),
                                        color: Colors.black,
                                        fontWeight: FontWeight.normal,
                                      ),
                                    ],
                                  ),
                                ],
                              )
                            ],
                          ),
                        ),
                        Divider(
                          height: 1.0,
                          thickness: 1.0,
                          color: Colors.grey,
                        ),
                        if (model.procedureList.length != 0)
                          SizedBox(
                              height: model.procedureList[0].rowcount == 0
                                  ? 200.0
                                  : 10.0),
                        //model.prescriptionList == null
                        if (model.procedureList.length != 0)
                          model.procedureList[0].rowcount == 0
                              ? Column(
                                  mainAxisAlignment: MainAxisAlignment.center,
                                  crossAxisAlignment:
                                      CrossAxisAlignment.stretch,
                                  children: [
                                    InkWell(
                                      onTap: () {
                                        addSelectedProcedure(context);
                                        //model.postPrescription();
                                      },
                                      child: CircleAvatar(
                                        radius: 65,
                                        backgroundColor: Color(0XFFB8382C),
                                        child: CircleAvatar(
                                          radius: 60,
                                          backgroundColor: Colors.white,
                                          child: Icon(
                                            Icons.add,
                                            color: Colors.black,
                                            size: 45.0,
                                          ),
                                        ),
                                      ),
                                    ),
                                    SizedBox(
                                      height: 15.0,
                                    ),
                                    Row(
                                      mainAxisAlignment:
                                          MainAxisAlignment.center,
                                      children: [
                                        AppText(
                                          'NO ORDER FOR PROCEDURE LISTED',
                                          color: Colors.black,
                                          fontWeight: FontWeight.w900,
                                        ),
                                      ],
                                    ),
                                    Row(
                                      mainAxisAlignment:
                                          MainAxisAlignment.center,
                                      children: [
                                        AppText(
                                          TranslationBase.of(context).addNow,
                                          color: Color(0XFFB8382C),
                                          fontWeight: FontWeight.w900,
                                        ),
                                      ],
                                    ),
                                  ],
                                )
                              : Padding(
                                  padding: EdgeInsets.all(16.0),
                                  child: NetworkBaseView(
                                    baseViewModel: model,
                                    child: Column(
                                      mainAxisAlignment:
                                          MainAxisAlignment.start,
                                      children: [
                                        InkWell(
                                          child: Container(
                                            height: 50.0,
                                            width: 450.0,
                                            decoration: BoxDecoration(
                                              border: Border.all(
                                                  color: Colors.grey),
                                              borderRadius:
                                                  BorderRadius.circular(10.0),
                                            ),
                                            child: Padding(
                                              padding: EdgeInsets.all(8.0),
                                              child: Row(
                                                mainAxisAlignment:
                                                    MainAxisAlignment
                                                        .spaceBetween,
                                                children: [
                                                  AppText(
                                                    ' Add more procedure',
                                                    fontWeight: FontWeight.w100,
                                                    fontSize: 12.5,
                                                  ),
                                                  Icon(
                                                    Icons.add,
                                                    color: Color(0XFFB8382C),
                                                  )
                                                ],
                                              ),
                                            ),
                                          ),
                                          onTap: () {
                                            addSelectedProcedure(context);
                                          },
                                        ),
                                        // Container(
                                        //   decoration: BoxDecoration(
                                        //       borderRadius: BorderRadius.all(
                                        //           Radius.circular(6.0)),
                                        //       border: Border.all(
                                        //           width: 1.0,
                                        //           color: HexColor("#CCCCCC"))),
                                        //   child: AppTextFormField(
                                        //     labelText: 'Add more procedure',
                                        //     borderColor: Colors.white,
                                        //     //suffixIcon: Icons.search,
                                        //
                                        //     //textInputType: TextInputType.number,
                                        //     inputFormatter: ONLY_NUMBERS,
                                        //     onTap: () {
                                        //       addSelectedProcedure(context);
                                        //     },
                                        //   ),
                                        // ),
                                        SizedBox(
                                          height: 35.0,
                                        ),
                                        ...List.generate(
                                          model.procedureList[0].rowcount,
                                          (index) => Container(
                                            child: Column(
                                              children: [
                                                Row(
                                                  mainAxisAlignment:
                                                      MainAxisAlignment
                                                          .spaceBetween,
                                                  children: [
                                                    Container(
                                                      height: 120.0,
                                                      width: 45.0,
                                                      child: Column(
                                                        children: [
                                                          AppText(
                                                            '8\nDEC',
                                                            color: Colors.green,
                                                          )
                                                        ],
                                                      ),
                                                    ),
                                                    Container(
                                                      height: 120,
                                                      width: 325.0,
                                                      child: Column(
                                                        children: [
                                                          Row(
                                                            children: [
                                                              AppText(
                                                                'Code #: ',
                                                                fontWeight:
                                                                    FontWeight
                                                                        .w900,
                                                                fontSize: 15.0,
                                                              ),
                                                              AppText(
                                                                model
                                                                    .procedureList[
                                                                        0]
                                                                    .entityList[
                                                                        index]
                                                                    .procedureId
                                                                    .toString(),
                                                                fontSize: 13.0,
                                                              ),
                                                              SizedBox(
                                                                width: 12.0,
                                                              ),
                                                              AppText(
                                                                'Order Type: ',
                                                                fontWeight:
                                                                    FontWeight
                                                                        .w900,
                                                                fontSize: 15.0,
                                                              ),
                                                              AppText(
                                                                'Urgent',
                                                                fontSize: 13.0,
                                                                color:
                                                                    Colors.red,
                                                              ),
                                                            ],
                                                          ),
                                                          Row(
                                                            children: [
                                                              Container(
                                                                child: Expanded(
                                                                  child:
                                                                      AppText(
                                                                    model
                                                                        .procedureList[
                                                                            0]
                                                                        .entityList[
                                                                            index]
                                                                        .procedureName,
                                                                    fontWeight:
                                                                        FontWeight
                                                                            .w800,
                                                                  ),
                                                                ),
                                                              )
                                                            ],
                                                          ),

                                                          Row(
                                                            children: [
                                                              AppText(
                                                                'Price: ',
                                                                fontWeight:
                                                                    FontWeight
                                                                        .w900,
                                                              ),
                                                              Expanded(
                                                                child: AppText(
                                                                    model
                                                                        .procedureList[
                                                                            0]
                                                                        .entityList[
                                                                            index]
                                                                        .price
                                                                        .toString(),
                                                                    fontSize:
                                                                        13.0),
                                                              )
                                                            ],
                                                          ),
                                                          SizedBox(
                                                            height: 10.0,
                                                          ),

                                                          Row(
                                                            children: [
                                                              AppText(
                                                                'Some short remark about the procedure',
                                                                fontSize: 13.5,
                                                              ),
                                                            ],
                                                          ),
                                                          SizedBox(
                                                            height: 10.0,
                                                          ),

                                                          Divider(
                                                            height: 5.0,
                                                            thickness: 1.0,
                                                            color: Colors.grey,
                                                          )
                                                          // SizedBox(
                                                          //   height: 40,
                                                          // ),
                                                        ],
                                                      ),
                                                    ),
                                                    Container(
                                                      width: 30,
                                                      height: 120,
                                                      child: Column(
                                                        children: [
                                                          Icon(Icons.edit)
                                                        ],
                                                      ),
                                                    )
                                                  ],
                                                ),
                                              ],
                                            ),
                                          ),
                                        ),
                                      ],
                                    ),
                                  ),
                                )
                      ],
                    ),
                  ),
                ),
              )),
    );
  }
}

postProcedure({ProcedureViewModel model}) async {
  model = new ProcedureViewModel();
  PostProcedureReqModel postProcedureReqModel = new PostProcedureReqModel();
  List<Controls> controls = List();
  List<Procedures> controlsProcedure = List();

  postProcedureReqModel.appointmentNo = 2016054575;

  postProcedureReqModel.episodeID = 200012166;
  postProcedureReqModel.patientMRN = 3120725;
  postProcedureReqModel.vidaAuthTokenID =
      'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxNDg1IiwianRpIjoiZjQ4YTk0OTQtYTczZS00MDI3LWI2MjgtNzc4MjAwMzUyYWEzIiwiZW1haWwiOiJNb2hhbWVkLlJlc3dhbkBjbG91ZHNvbHV0aW9uLXNhLmNvbSIsImlkIjoiMTQ4NSIsIk5hbWUiOiJTSEFLRVJBIFBBUlZFRU4gKFVTRUQgQlkgRVNFUlZJQ0VTKSIsIkVtcGxveWVlSWQiOiIxNDg1IiwiRmFjaWxpdHlHcm91cElkIjoiMDEwMjY2IiwiRmFjaWxpdHlJZCI6IjE1IiwiUGhhcmFtY3lGYWNpbGl0eUlkIjoiNTUiLCJJU19QSEFSTUFDWV9DT05ORUNURUQiOiJUcnVlIiwiRG9jdG9ySWQiOiIxNDg1IiwiU0VTU0lPTklEIjoiMjE1ODUyMTAiLCJDbGluaWNJZCI6IjMiLCJyb2xlIjoiRE9DVE9SUyIsIm5iZiI6MTYwODM2NDU2OCwiZXhwIjoxNjA5MjI4NTY4LCJpYXQiOjE2MDgzNjQ1Njh9.YLbvq5nxPn8o9ZYkcbc5YAX7Jy23Mm0s33oRmE8GHDI';

  controls.add(
    Controls(code: 'Remarks', controlValue: 'Testing'),
  );
  controlsProcedure.add(
      Procedures(category: "02", procedure: "02011002", controls: controls));
  postProcedureReqModel.procedures = controlsProcedure;

  await model.postProcedure(postProcedureReqModel);
  DrAppToastMsg.showSuccesToast('Procedure had been added');
  if (model.state == ViewState.ErrorLocal) {
    helpers.showErrorToast(model.error);
  }
}

void addSelectedProcedure(context) {
  TextEditingController procedureController = TextEditingController();
  showModalBottomSheet(
      context: context,
      builder: (BuildContext bc) {
        return BaseView(
          //onModelReady: (model) => model.getCategories(),
          builder:
              (BuildContext context, ProcedureViewModel model, Widget child) =>
                  SingleChildScrollView(
            child: Container(
              height: 490,
              child: Padding(
                padding: EdgeInsets.all(12.0),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    AppText(
                      'Select Procedure'.toUpperCase(),
                      fontWeight: FontWeight.w900,
                    ),
                    // Text(model.categoriesList[0].categoryName),
                    SizedBox(
                      height: 9.0,
                    ),
                    Column(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        Container(
                          decoration: BoxDecoration(
                              borderRadius:
                                  BorderRadius.all(Radius.circular(6.0)),
                              border: Border.all(
                                  width: 1.0, color: HexColor("#CCCCCC"))),
                          child: AppTextFormField(
                            labelText: 'Add Delected Procedures'.toUpperCase(),
                            borderColor: Colors.white,
                            textInputType: TextInputType.text,
                            inputFormatter: ONLY_LETTERS,
                            controller: procedureController,
                          ),
                        ),
                        SizedBox(
                          height: 280.0,
                        ),
                        Container(
                          margin:
                              EdgeInsets.all(SizeConfig.widthMultiplier * 5),
                          child: Wrap(
                            alignment: WrapAlignment.center,
                            children: <Widget>[
                              AppButton(
                                title:
                                    TranslationBase.of(context).addMedication,
                                onPressed: () {
                                  Navigator.pop(context);
                                  postProcedure();
                                },
                              ),
                            ],
                          ),
                        ),
                      ],
                    )
                  ],
                ),
              ),
            ),
          ),
        );
      });
}
