import 'dart:convert';

import 'package:hmg_patient_app/core/viewModels/project_view_model.dart';
import 'package:hmg_patient_app/pages/insurance/AttachInsuranceCardImageDialog.dart';
import 'package:hmg_patient_app/services/clinic_services/get_clinic_service.dart';
import 'package:hmg_patient_app/theme/colors.dart';
import 'package:hmg_patient_app/uitl/app_toast.dart';
import 'package:hmg_patient_app/uitl/gif_loader_dialog_utils.dart';
import 'package:hmg_patient_app/uitl/translations_delegate_base.dart';
import 'package:hmg_patient_app/uitl/utils_new.dart';
import 'package:hmg_patient_app/widgets/buttons/defaultButton.dart';
import 'package:hmg_patient_app/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class BirthNotification extends StatefulWidget {
  const BirthNotification({Key? key}) : super(key: key);

  @override
  State<BirthNotification> createState() => _BirthNotificationState();
}

class _BirthNotificationState extends State<BirthNotification> {
  TextEditingController motherMRN = new TextEditingController();
  TextEditingController motherName = new TextEditingController();
  TextEditingController fatherName = new TextEditingController();
  TextEditingController fatherNameAR = new TextEditingController();
  TextEditingController babyName = new TextEditingController();
  TextEditingController babyNameAR = new TextEditingController();
  TextEditingController contactNumber = new TextEditingController();

  late ProjectViewModel projectViewModel;

  List<String> images = [];

  @override
  Widget build(BuildContext context) {
    projectViewModel = Provider.of(context);
    motherMRN.text = projectViewModel.user.patientID.toString();
    motherName.text = projectViewModel.user.firstName! + " " + projectViewModel.user.lastName!;
    contactNumber.text = projectViewModel.user.mobileNumber!;
    return AppScaffold(
      isShowAppBar: true,
      isShowDecPage: false,
      showNewAppBarTitle: true,
      showNewAppBar: true,
      appBarTitle: TranslationBase.of(context).birthNotificationTitle + " " + TranslationBase.of(context).birthNotificationSubTitle,
      body: SingleChildScrollView(
        child: Container(
          width: MediaQuery.of(context).size.width,
          decoration: containerRadius(Colors.white, 12),
          margin: EdgeInsets.all(21.0),
          padding: const EdgeInsets.all(21.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text(
                TranslationBase.of(context).enterDetailBelow + " :",
                overflow: TextOverflow.clip,
                style: TextStyle(
                  fontSize: 16.0,
                  fontWeight: FontWeight.w600,
                  color: Color(0xff2B353E),
                  letterSpacing: -0.64,
                ),
              ),
              mHeight(16),
              inputWidget(TranslationBase.of(context).mothersMRN, "", motherMRN, isEnable: false),
              mHeight(16),
              inputWidget(TranslationBase.of(context).mothersName, "", motherName, isEnable: false),
              mHeight(16),
              inputWidget(TranslationBase.of(context).fathersNameEN, "", fatherName),
              mHeight(16),
              inputWidget(TranslationBase.of(context).fathersNameAR, "", fatherNameAR),
              mHeight(16),
              inputWidget(TranslationBase.of(context).babysNameEN, "", babyName),
              mHeight(16),
              inputWidget(TranslationBase.of(context).babysNameAR, "", babyNameAR),
              mHeight(16),
              inputWidget(TranslationBase.of(context).contactNumber, "", contactNumber),
              mHeight(16),
              DefaultButton(
                TranslationBase.of(context).scanID,
                () {
                  confirmAttachInsuranceCardImageDialogDialog(
                      context: context, name: projectViewModel.user.firstName! + " " + projectViewModel.user.lastName!, fileNo: projectViewModel.user.patientID.toString());
                },
                color: CustomColors.accentColor,
                disabledColor: CustomColors.grey2,
              ),
              if (images.isNotEmpty) mHeight(16),
              if (images.isNotEmpty)
                Padding(
                  padding: const EdgeInsets.only(top: 16.0, bottom: 16.0),
                  child: Row(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: <Widget>[
                      Image.memory(
                        base64Decode(images[0]),
                        width: 80.0,
                        height: 80.0,
                        fit: BoxFit.cover,
                      ),
                      Text(
                        "image 1.png",
                        overflow: TextOverflow.clip,
                        style: TextStyle(
                          fontSize: 14.0,
                          fontWeight: FontWeight.w600,
                          color: Color(0xff2B353E),
                          letterSpacing: -0.64,
                        ),
                      ),
                      InkWell(
                        onTap: () {
                          setState(() {
                            images.clear();
                          });
                        },
                        child: Icon(
                          Icons.delete_sharp,
                          color: Colors.red[300],
                        ),
                      )
                    ],
                  ),
                ),
              mHeight(16),
              Text(
                "●   " + TranslationBase.of(context).birthNotificationNotes1,
                overflow: TextOverflow.clip,
                style: TextStyle(
                  fontSize: 14.0,
                  fontWeight: FontWeight.w600,
                  color: Color(0xff2B353E),
                  letterSpacing: -0.64,
                ),
              ),
              mHeight(16),
              Text(
                "●   " + TranslationBase.of(context).birthNotificationNotes2,
                overflow: TextOverflow.clip,
                style: TextStyle(
                  fontSize: 14.0,
                  fontWeight: FontWeight.w600,
                  color: Color(0xff2B353E),
                  letterSpacing: -0.64,
                ),
              ),
              mHeight(16),
              Text(
                "●   " + TranslationBase.of(context).birthNotificationNotes3,
                overflow: TextOverflow.clip,
                style: TextStyle(
                  fontSize: 14.0,
                  fontWeight: FontWeight.w600,
                  color: Color(0xff2B353E),
                  letterSpacing: -0.64,
                ),
              ),
              mHeight(100.0),
              // DefaultButton(
              //   TranslationBase.of(context).submit,
              //   (fatherNameAR.text.isEmpty || fatherName.text.isEmpty || babyNameAR.text.isEmpty || babyName.text.isEmpty) ? null : () {
              //     submitBirthNotification();
              //   },
              //   color: CustomColors.accentColor,
              //   disabledColor: CustomColors.grey2,
              // ),
            ],
          ),
        ),
      ),
      bottomSheet: Container(
        color: Colors.white,
        width: double.infinity,
        padding: EdgeInsets.all(20),
        child: DefaultButton(
          TranslationBase.of(context).submit,
          (fatherNameAR.text.isEmpty || fatherName.text.isEmpty || babyNameAR.text.isEmpty || babyName.text.isEmpty || images.isEmpty)
              ? null
              : () {
                  submitBirthNotification();
                },
          color: CustomColors.accentColor,
          disabledColor: CustomColors.grey2,
        ),
      ),
    );
  }

  void submitBirthNotification() {
    ClinicListService service = new ClinicListService();
    GifLoaderDialogUtils.showMyDialog(context);
    service
        .submitBirthNotification(
            projectViewModel.user.patientID!, projectViewModel.inPatientProjectID, fatherNameAR.text, fatherName.text, babyNameAR.text, babyName.text, contactNumber.text, images[0], context)
        .then((res) {
      GifLoaderDialogUtils.hideDialog(context);
      AppToast.showSuccessToast(message: TranslationBase.of(context).processDoneSuccessfully);
      Navigator.of(context).pop();
    }).catchError((err) {
      print(err);
    });
  }

  void confirmAttachInsuranceCardImageDialogDialog({required BuildContext context, required String name, required String fileNo}) {
    showDialog(
      context: context,
      builder: (cxt) => AttachInsuranceCardImageDialog(
        fileNo: fileNo,
        name: name,
        image: (file, image) async {
          images.clear();
          images.add(image);
          setState(() {});
        },
        isBirthNotification: true,
      ),
    );
  }

  Widget inputWidget(String _labelText, String _hintText, TextEditingController _controller, {String? prefix, bool isEnable = true, bool hasSelection = false}) {
    return Container(
      padding: EdgeInsets.only(left: 16, right: 16, bottom: 15, top: 15),
      alignment: Alignment.center,
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(12),
        color: Colors.white,
        border: Border.all(
          color: Color(0xffefefef),
          width: 1,
        ),
      ),
      child: InkWell(
        onTap: hasSelection ? () {} : null,
        child: Row(
          children: [
            Expanded(
              child: Column(
                mainAxisSize: MainAxisSize.min,
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    _labelText,
                    style: TextStyle(
                      fontSize: 11,
                      fontWeight: FontWeight.w600,
                      color: Color(0xff2B353E),
                      letterSpacing: -0.44,
                    ),
                  ),
                  TextField(
                    enabled: isEnable,
                    scrollPadding: EdgeInsets.zero,
                    keyboardType: TextInputType.name,
                    controller: _controller,
                    onChanged: (value) => {},
                    style: TextStyle(
                      fontSize: 14,
                      height: 21 / 14,
                      fontWeight: FontWeight.w400,
                      color: Color(0xff2B353E),
                      letterSpacing: -0.44,
                    ),
                    decoration: InputDecoration(
                      isDense: true,
                      hintText: _hintText,
                      hintStyle: TextStyle(
                        fontSize: 14,
                        height: 21 / 14,
                        fontWeight: FontWeight.w400,
                        color: Color(0xff575757),
                        letterSpacing: -0.56,
                      ),
                      prefixIconConstraints: BoxConstraints(minWidth: 50),
                      prefixIcon: prefix == null
                          ? null
                          : Text(
                              "+" + prefix,
                              style: TextStyle(
                                fontSize: 14,
                                height: 21 / 14,
                                fontWeight: FontWeight.w500,
                                color: Color(0xff2E303A),
                                letterSpacing: -0.56,
                              ),
                            ),
                      contentPadding: EdgeInsets.zero,
                      border: InputBorder.none,
                      focusedBorder: InputBorder.none,
                      enabledBorder: InputBorder.none,
                    ),
                  ),
                ],
              ),
            ),
            if (hasSelection) Icon(Icons.keyboard_arrow_down_outlined),
          ],
        ),
      ),
    );
  }
}
