import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/viewModel/patient-ucaf-viewmodel.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/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/PatientHeaderWidgetNoAvatar.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_texts_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hexcolor/hexcolor.dart';

import '../../../../routes.dart';
import '../../../QR_reader_screen.dart';

class UCAFInputScreen extends StatefulWidget {
  @override
  _UCAFInputScreenState createState() => _UCAFInputScreenState();
}

class _UCAFInputScreenState extends State<UCAFInputScreen> {
  bool _inPatient = false;
  bool _emergencyCase = false;
  final _durationOfIllnessController = TextEditingController();
  final _additionalComplaintsController = TextEditingController();
  final _otherController = TextEditingController();
  final _howController = TextEditingController();
  final _whenController = TextEditingController();
  final _whereController = TextEditingController();
  final _managementsLineController = TextEditingController();
  final _signsController = TextEditingController();
  List<Map> conditionsData = [
    {"name": "CHRONIC", "isChecked": false},
    {"name": "RTA", "isChecked": false},
    {"name": "PSYCHIATRIC", "isChecked": false},
    {"name": "WORK RELATED", "isChecked": false},
    {"name": "VACCINATION", "isChecked": false},
    {"name": "CONGENITAL", "isChecked": false},
    {"name": "INFERTILITY", "isChecked": false},
    {"name": "CHECK-UP", "isChecked": false},
    {"name": "PREGNANCY/INDICATE MP", "isChecked": false},
    {"name": "CLEANING", "isChecked": false},
    {"name": "ORTHO DONTICS", "isChecked": false},
    {"name": "SPORTS RELATED", "isChecked": false},
    {"name": "REGULAR DENTAL TREATMENT", "isChecked": false},
    {"name": "IS TRAUMA TREATMENT SPECIFY ETA", "isChecked": false},
  ];

  @override
  Widget build(BuildContext context) {
    final routeArgs = ModalRoute.of(context).settings.arguments as Map;
    PatiantInformtion patient = routeArgs['patient'];
    final screenSize = MediaQuery.of(context).size;

    return BaseView<UcafViewModel>(
      onModelReady: (model) => model.getUCAFData(patient),
      builder: (_, model, w) => AppScaffold(
        baseViewModel: model,
        appBarTitle: TranslationBase.of(context).ucaf,
        body: model.patientVitalSigns != null &&
                model.patientChiefComplaintList != null &&
                model.patientChiefComplaintList.length > 0
            ? SingleChildScrollView(
                child: Column(
                  children: [
                    PatientHeaderWidgetNoAvatar(patient),
                    Container(
                      margin:
                          EdgeInsets.symmetric(vertical: 16, horizontal: 16),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          CheckboxListTile(
                            title: AppText(
                              TranslationBase.of(context).inPatient,
                              fontWeight: FontWeight.bold,
                              fontSize: SizeConfig.textMultiplier * 2.1,
                            ),
                            value: _inPatient,
                            onChanged: (newValue) {
                              setState(() {
                                _inPatient = newValue;
                              });
                            },
                            controlAffinity: ListTileControlAffinity.leading,
                            contentPadding: EdgeInsets.all(0),
                          ),
                          CheckboxListTile(
                            title: AppText(
                              TranslationBase.of(context).emergencyCase,
                              fontWeight: FontWeight.bold,
                              fontSize: SizeConfig.textMultiplier * 2.1,
                            ),
                            value: _emergencyCase,
                            onChanged: (newValue) {
                              setState(() {
                                _emergencyCase = newValue;
                              });
                            },
                            controlAffinity: ListTileControlAffinity.leading,
                            contentPadding: EdgeInsets.all(0),
                          ),
                          Container(
                              height: screenSize.height * 0.070,
                              child: TextField(
                                decoration: Helpers.textFieldSelectorDecoration(
                                    TranslationBase.of(context)
                                        .durationOfIllness,
                                    null,
                                    false),
                                enabled: true,
                                controller: _durationOfIllnessController,
                                inputFormatters: [
                                  FilteringTextInputFormatter.allow(
                                      RegExp(ONLY_NUMBERS))
                                ],
                                keyboardType: TextInputType.number,
                              )),
                          SizedBox(
                            height: 10,
                          ),
                          Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Row(
                                children: [
                                  AppText(
                                    "BP (H/L)",
                                    fontSize: SizeConfig.textMultiplier * 1.8,
                                    color: Colors.black,
                                    fontWeight: FontWeight.w700,
                                  ),
                                  SizedBox(
                                    width: 8,
                                  ),
                                  AppText(
                                    "${model.patientVitalSigns.bloodPressureHigher}/${model.patientVitalSigns.bloodPressureLower}",
                                    fontSize: SizeConfig.textMultiplier * 2,
                                    color: Colors.grey.shade800,
                                    fontWeight: FontWeight.normal,
                                  ),
                                ],
                              ),
                              SizedBox(
                                width: 4,
                              ),
                              Expanded(
                                child: Row(
                                  children: [
                                    AppText(
                                      "${TranslationBase.of(context).temperature}",
                                      fontSize: SizeConfig.textMultiplier * 1.8,
                                      color: Colors.black,
                                      fontWeight: FontWeight.w700,
                                    ),
                                    SizedBox(
                                      width: 8,
                                    ),
                                    Expanded(
                                      child: AppText(
                                        "${model.patientVitalSigns.temperatureCelcius}(C), ${(model.patientVitalSigns.temperatureCelcius * (9 / 5) + 32).toStringAsFixed(2)}(F)",
                                        fontSize: SizeConfig.textMultiplier * 2,
                                        color: Colors.grey.shade800,
                                        fontWeight: FontWeight.normal,
                                      ),
                                    ),
                                  ],
                                ),
                              ),
                            ],
                          ),
                          SizedBox(
                            height: 4,
                          ),
                          Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Row(
                                children: [
                                  AppText(
                                    "${TranslationBase.of(context).pulseBeats} :",
                                    fontSize: SizeConfig.textMultiplier * 1.8,
                                    color: Colors.black,
                                    fontWeight: FontWeight.w700,
                                  ),
                                  SizedBox(
                                    width: 8,
                                  ),
                                  AppText(
                                    "${model.patientVitalSigns.pulseBeatPerMinute}",
                                    fontSize: SizeConfig.textMultiplier * 2,
                                    color: Colors.grey.shade800,
                                    fontWeight: FontWeight.normal,
                                  ),
                                ],
                              ),
                            ],
                          ),
                          SizedBox(
                            height: 16,
                          ),
                          AppText(
                            TranslationBase.of(context)
                                .chiefComplaintsAndSymptoms,
                            fontWeight: FontWeight.bold,
                            fontSize: SizeConfig.textMultiplier * 2.5,
                          ),
                          SizedBox(
                            height: 8,
                          ),
                          AppText(
                            TranslationBase.of(context)
                                .patientFeelsPainInHisBackAndCough,
                            fontWeight: FontWeight.normal,
                            fontSize: SizeConfig.textMultiplier * 2.0,
                          ),
                          SizedBox(
                            height: 8,
                          ),
                          Container(
                              child: TextField(
                                decoration: Helpers.textFieldSelectorDecoration(
                                    TranslationBase.of(context)
                                        .additionalTextComplaints,
                                    helpers.parseHtmlString(model
                                        .patientChiefComplaintList[0]
                                        .chiefComplaint),
                                    false),
                                enabled: false,
                                controller: _additionalComplaintsController,
                                keyboardType: TextInputType.multiline,
                                minLines: 1,
                                maxLines: 20,
                              )),
                          SizedBox(
                            height: 16,
                          ),
                          AppText(
                            TranslationBase.of(context).otherConditions,
                            fontWeight: FontWeight.bold,
                            fontSize: SizeConfig.textMultiplier * 2.0,
                          ),
                          ...List.generate(
                              conditionsData.length,
                              (index) => CheckboxListTile(
                                    title: AppText(
                                      conditionsData[index]['name'],
                                      fontWeight: FontWeight.bold,
                                      fontSize: SizeConfig.textMultiplier * 2.1,
                                    ),
                                    value: conditionsData[index]['isChecked'],
                                    onChanged: (newValue) {
                                      setState(() {
                                        conditionsData[index]['isChecked'] =
                                            newValue;
                                      });
                                    },
                                    controlAffinity:
                                        ListTileControlAffinity.leading,
                                    contentPadding: EdgeInsets.all(0),
                                  )),
                          SizedBox(
                            height: 8,
                          ),
                          Container(
                              height: screenSize.height * 0.070,
                              child: TextField(
                                decoration: Helpers.textFieldSelectorDecoration(
                                    TranslationBase.of(context).other,
                                    null,
                                    false),
                                enabled: true,
                                controller: _otherController,
                                keyboardType: TextInputType.text,
                              )),
                          SizedBox(
                            height: 8,
                          ),
                          Container(
                              height: screenSize.height * 0.070,
                              child: TextField(
                                decoration: Helpers.textFieldSelectorDecoration(
                                    TranslationBase.of(context).how,
                                    null,
                                    false),
                                enabled: true,
                                controller: _howController,
                                keyboardType: TextInputType.text,
                              )),
                          SizedBox(
                            height: 8,
                          ),
                          Row(
                            children: [
                              Expanded(
                                child: Container(
                                    height: screenSize.height * 0.070,
                                    child: TextField(
                                      decoration:
                                          Helpers.textFieldSelectorDecoration(
                                              TranslationBase.of(context).when,
                                              null,
                                              false),
                                      enabled: true,
                                      controller: _whenController,
                                      keyboardType: TextInputType.text,
                                    )),
                              ),
                              SizedBox(
                                width: 4,
                              ),
                              Expanded(
                                child: Container(
                                    height: screenSize.height * 0.070,
                                    child: TextField(
                                      decoration:
                                          Helpers.textFieldSelectorDecoration(
                                              TranslationBase.of(context).where,
                                              null,
                                              false),
                                      enabled: true,
                                      controller: _whereController,
                                      keyboardType: TextInputType.text,
                                    )),
                              ),
                            ],
                          ),
                          SizedBox(
                            height: 8,
                          ),
                          Container(
                              child: TextField(
                            decoration: Helpers.textFieldSelectorDecoration(
                                TranslationBase.of(context)
                                    .specifyPossibleLineManagement,
                                null,
                                false),
                            enabled: true,
                            controller: _managementsLineController,
                            keyboardType: TextInputType.text,
                            minLines: 4,
                            maxLines: 6,
                          )),
                          SizedBox(
                            height: 16,
                          ),
                          AppText(
                            TranslationBase.of(context).significantSigns,
                            fontWeight: FontWeight.bold,
                            fontSize: SizeConfig.textMultiplier * 2.0,
                          ),
                          SizedBox(
                            height: 8,
                          ),
                          Container(
                              child: TextField(
                            decoration: Helpers.textFieldSelectorDecoration(
                                TranslationBase.of(context).backAbdomen,
                                null,
                                false),
                            enabled: true,
                            controller: _signsController,
                                keyboardType: TextInputType.multiline,
                                minLines: null,
                                maxLines: null,
                          )),
                          SizedBox(
                            height: 16,
                          ),
                          AppButton(
                            title: TranslationBase.of(context).next,
                            color: HexColor("#B8382B"),
                            onPressed: () {
                              Navigator.of(context).pushNamed(
                                  PATIENT_UCAF_DETAIL,
                                  arguments: {'patient': patient});
                            },
                          ),
                        ],
                      ),
                    ),
                  ],
                ),
              )
            : Container(
                child: Center(
                  child: AppText(
                    model.patientVitalSigns == null
                        ? TranslationBase.of(context).vitalSignEmptyMsg
                        : TranslationBase.of(context).chiefComplaintEmptyMsg,
                    fontWeight: FontWeight.normal,
                    color: HexColor("#B8382B"),
                    fontSize: SizeConfig.textMultiplier * 2.5,
                  ),
                ),
              ),
      ),
    );
  }
}
