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/MyReferralPatientModel.dart';
import 'package:doctor_app_flutter/core/provider/robot_provider.dart';
import 'package:doctor_app_flutter/core/viewModel/patient-referral-viewmodel.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/bottom_sheet_title.dart';
import 'package:doctor_app_flutter/util/dr_app_toast_msg.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/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/speech-text-popup.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:speech_to_text/speech_recognition_error.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt;


class AddReplayOnReferralPatient extends StatefulWidget {
  final PatientReferralViewModel patientReferralViewModel;
  final MyReferralPatientModel myReferralInPatientModel;
  //TODO Jammal
  const AddReplayOnReferralPatient(
      {Key key, this.patientReferralViewModel, this.myReferralInPatientModel})
      : super(key: key);

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

class _AddReplayOnReferralPatientState extends State<AddReplayOnReferralPatient> {

  bool isSubmitted = false;
  stt.SpeechToText speech = stt.SpeechToText();
  var reconizedWord;
  var event = RobotProvider();
  TextEditingController progressNoteController = TextEditingController();
  @override
  void initState() {
    requestPermissions();
    super.initState();
  }


  @override
  Widget build(BuildContext context) {
    return AppScaffold(
      isShowAppBar: false,
      backgroundColor: Theme.of(context).scaffoldBackgroundColor,
      body: SingleChildScrollView(
        child: Container(
          height: MediaQuery.of(context).size.height * 1.0,
          child: Padding(
            padding: EdgeInsets.all(0.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                BottomSheetTitle(title: 'Replay'),
                SizedBox(
                  height: 10.0,
                ),
                Center(
                  child: FractionallySizedBox(
                    widthFactor: 0.9,
                    child: Column(
                      children: [
                        Stack(
                          children: [
                            AppTextFieldCustom(
                              hintText: 'Replay your responses here',
                              controller: progressNoteController,
                              maxLines: 35,
                              minLines: 25,
                              hasBorder: true,
                              validationError:
                                  progressNoteController.text.isEmpty &&
                                          isSubmitted
                                      ? TranslationBase.of(context).emptyMessage
                                      : null,
                            ),
                            Positioned(
                              top: 0,//MediaQuery.of(context).size.height * 0,
                              right: 15,
                              child: IconButton(
                                icon: Icon(
                                  DoctorApp.speechtotext,
                                  color: Colors.black,
                                ),
                                onPressed: () {
                                  onVoiceText();
                                },
                              ),
                            )
                          ],
                        ),
                      ],
                    ),
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
      bottomSheet: Container(
        margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5),
        child: Wrap(
          alignment: WrapAlignment.center,
          children: <Widget>[
            AppButton(
                title: 'Submit Replay',
                color: Color(0xff359846),
                fontWeight: FontWeight.w700,
                onPressed: () async {
                  setState(() {
                    isSubmitted = true;
                  });
                  if (progressNoteController.text.isNotEmpty) {
                    GifLoaderDialogUtils.showMyDialog(context);
                    await widget.patientReferralViewModel.replay(progressNoteController.text.trim(), widget.myReferralInPatientModel);
                    if (widget.patientReferralViewModel.state == ViewState.ErrorLocal) {
                      Helpers.showErrorToast(widget.patientReferralViewModel.error);
                    } else {
                      GifLoaderDialogUtils.hideDialog(context);
                      DrAppToastMsg.showSuccesToast("Your Replay Added Successfully");
                      Navigator.of(context).pop();
                      Navigator.of(context).pop();
                    }
                  }else {
                    Helpers.showErrorToast("You can't add empty replay");
                    setState(() {
                      isSubmitted = false;
                    });
                  }
                }),
          ],
        ),
      ),
    );
  }

  onVoiceText() async {
    new SpeechToText(context: context).showAlertDialog(context);
    var lang = TranslationBase.of(AppGlobal.CONTEX).locale.languageCode;
    bool available = await speech.initialize(
        onStatus: statusListener, onError: errorListener);
    if (available) {
      speech.listen(
        onResult: resultListener,
        // listenMode: ListenMode.confirmation,
        localeId: lang == 'en' ? 'en-US' : 'ar-SA',
      );
    } else {
      print("The user has denied the use of speech recognition.");
    }
  }

  void errorListener(SpeechRecognitionError error) {}

  void statusListener(String status) {
    reconizedWord = status == 'listening' ? 'Lisening...' : 'Sorry....';
  }

  void requestPermissions() async {
    Map<Permission, PermissionStatus> statuses = await [
      Permission.microphone,
    ].request();
  }

  void resultListener(result) {
    reconizedWord = result.recognizedWords;
    event.setValue({"searchText": reconizedWord});

    if (result.finalResult == true) {
      setState(() {
        SpeechToText.closeAlertDialog(context);
        progressNoteController.text = reconizedWord;
      });
    }
  }
}
