import 'package:diplomaticquarterapp/core/model/labs/lab_result.dart';
import 'package:diplomaticquarterapp/core/model/labs/patient_lab_orders.dart';
import 'package:diplomaticquarterapp/core/service/medical/labs_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/medical/labs/passport_update_page.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart';
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_send_email_dialog.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import '../../text.dart';
import 'FlowChartPage.dart';

class LabResultWidget extends StatelessWidget {
  final String filterName;

  final List<LabResult> patientLabResultList;
  final PatientLabOrders patientLabOrder;

  LabResult covidLabResult;

  LabResultWidget({Key key, this.filterName, this.patientLabResultList, this.patientLabOrder}) : super(key: key);
  ProjectViewModel projectViewModel;

  @override
  Widget build(BuildContext context) {
    projectViewModel = Provider.of(context);

    return Container(
      width: double.infinity,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Texts(filterName),
              InkWell(
                onTap: () {
                  Navigator.push(
                    context,
                    FadePage(
                      page: FlowChartPage(
                        filterName: filterName,
                        patientLabOrder: patientLabOrder,
                      ),
                    ),
                  );
                },
                child: Texts(
                  TranslationBase.of(context).showMoreBtn,
                  decoration: TextDecoration.underline,
                  color: Colors.blue,
                ),
              ),
            ],
          ),
          Table(
            border: TableBorder.symmetric(
              inside: BorderSide(width: 2.0, color: Colors.grey[300]),
            ),
            children: fullData(patientLabResultList, context),
          ),
          checkIfCovidLab(patientLabResultList)
              ? Container(
                  margin: EdgeInsets.only(top: 10.0),
                  child: ButtonTheme(
                    shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(10.0),
                    ),
                    minWidth: MediaQuery.of(context).size.width * 0.91,
                    height: 45.0,
                    child: RaisedButton(
                      color: new Color(0xFFc5272d),
                      textColor: Colors.white,
                      disabledTextColor: Colors.white,
                      disabledColor: Colors.red[300],
                      onPressed: () {
                        showKSADialog(context);
                      },
                      child: Text(TranslationBase.of(context).generateCovidCertificate, style: TextStyle(fontSize: 18.0)),
                    ),
                  ),
                )
              : Container(),
        ],
      ),
    );
  }

  generateCovidCertificate(BuildContext context, String isOutsideKSA) {
    LabsService service = new LabsService();
    GifLoaderDialogUtils.showMyDialog(context);

    service.generateCovidLabReport(covidLabResult, isOutsideKSA).then((res) {
      GifLoaderDialogUtils.hideDialog(context);
      AppToast.showSuccessToast(message: TranslationBase.of(context).emailSentSuccessfully);
    }).catchError((err) {
      GifLoaderDialogUtils.hideDialog(context);
      print(err);
    });
  }

  openPassportUpdatePage(BuildContext context) {
    Navigator.push(context, FadePage(page: PassportUpdatePage())).then((value) {
      print(value);
      if(value != null && value == true) {
        showConfirmMessage(context, projectViewModel.user.emailAddress, "yes");
      }
    });
  }

  void showKSADialog(BuildContext context) {
    ConfirmDialog dialog = new ConfirmDialog(
        context: context,
        confirmMessage: TranslationBase.of(context).isReportOutsideKsa,
        okText: TranslationBase.of(context).yes,
        cancelText: TranslationBase.of(context).no,
        okFunction: () => {
              Navigator.of(context).pop(),
              openPassportUpdatePage(context)
              // showConfirmMessage(context, projectViewModel.user.emailAddress, "yes")
            },
        cancelFunction: () => {showConfirmMessage(context, projectViewModel.user.emailAddress, "no")});
    dialog.showAlertDialog(context);
  }

  void showConfirmMessage(BuildContext context, String email, String isOutsideKSA) {
    showDialog(
      context: context,
      child: ConfirmSendEmailDialog(
        email: email,
        onTapSendEmail: () {
          generateCovidCertificate(context, isOutsideKSA);
        },
      ),
    );
  }

  bool checkIfCovidLab(List<LabResult> labResultList) {
    bool isCovidResult = false;
    labResultList.forEach((order) {
      if (order.testCode.toUpperCase().contains("COVID") && order.isCertificateAllowed.toString() == "true") {
        isCovidResult = true;
        covidLabResult = order;
      }
    });

    return isCovidResult;
  }

  List<TableRow> fullData(List<LabResult> labResultList, context) {
    List<TableRow> tableRow = [];
    tableRow.add(
      TableRow(
        children: [
          Container(
            child: Container(
              decoration: BoxDecoration(
                color: Theme.of(context).primaryColor,
                borderRadius: BorderRadius.only(
                  topLeft: projectViewModel.isArabic ? Radius.circular(0.0) : Radius.circular(10.0),
                  topRight: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0.0),
                ),
              ),
              child: Center(
                child: Texts(
                  TranslationBase.of(context).description,
                  color: Colors.white,
                ),
              ),
              height: 60,
            ),
          ),
          Container(
            child: Container(
                decoration: BoxDecoration(
                  color: Theme.of(context).primaryColor,
                ),
                child: Center(
                  child: Texts(TranslationBase.of(context).value, color: Colors.white),
                ),
                height: 60),
          ),
          Container(
            child: Container(
                decoration: BoxDecoration(
                  color: Theme.of(context).primaryColor,
                  borderRadius: BorderRadius.only(
                    topLeft: projectViewModel.isArabic ? Radius.circular(10.0) : Radius.circular(0.0),
                    topRight: projectViewModel.isArabic ? Radius.circular(0.0) : Radius.circular(10.0),
                  ),
                ),
                child: Center(
                  child: Texts(TranslationBase.of(context).range, color: Colors.white),
                ),
                height: 60),
          ),
        ],
      ),
    );
    labResultList.forEach((lab) {
      tableRow.add(
        TableRow(
          children: [
            Container(
              child: Container(
                padding: EdgeInsets.all(10),
                color: Colors.white,
                child: Center(
                  child: Texts(
                    lab.description,
                    textAlign: TextAlign.center,
                  ),
                ),
              ),
            ),
            Container(
              child: Container(
                padding: EdgeInsets.all(10),
                color: Colors.white,
                child: Center(
                  child: Texts(
                    lab.resultValue + " " + lab.uOM,
                    textAlign: TextAlign.center,
                  ),
                ),
              ),
            ),
            Container(
              child: Container(
                padding: EdgeInsets.all(10),
                color: Colors.white,
                child: Center(
                  child: Texts(
                    lab.referanceRange,
                    textAlign: TextAlign.center,
                  ),
                ),
              ),
            ),
          ],
        ),
      );
    });
    return tableRow;
  }
}
