import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart';
import 'package:diplomaticquarterapp/models/MyInvoices/DentalInvoiceDetailResponse.dart';
import 'package:diplomaticquarterapp/models/MyInvoices/GetDentalAppointmentsResponse.dart';
import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart';
import 'package:diplomaticquarterapp/services/my_invoice_service/my_invoice_services.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/buttons/button.dart';
import 'package:diplomaticquarterapp/widgets/others/app_expandable_notifier.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class InvoiceDetail extends StatelessWidget {
  final DoctorList doctor;
  final ListDentalAppointments listDentalAppointments;
  final DentalInvoiceDetailResponse dentalInvoiceDetailResponse;
  final BuildContext context;

  int totalServiceRate = 0;
  int totalDiscount = 0;
  int totalVAT = 0;
  int subTotal = 0;
  int grandTotal = 0;

  InvoiceDetail(this.doctor, this.listDentalAppointments,
      this.dentalInvoiceDetailResponse, this.context);

  @override
  Widget build(BuildContext context) {
    ProjectViewModel projectViewModel = Provider.of(context);
    return AppScaffold(
      appBarTitle: TranslationBase.of(context).myInvoice,
      isShowAppBar: true,
      isShowDecPage: false,
      body: SingleChildScrollView(
        child: Container(
          child: Column(
            children: [
              DoctorView(
                  doctor: doctor,
                  isLiveCareAppointment: false,
                  isShowFlag: false),
              Container(
                margin: EdgeInsets.only(left: 10.0, right: 10.0),
                padding: EdgeInsets.only(
                    top: 10.0, left: 10.0, right: 10.0, bottom: 10.0),
                decoration: BoxDecoration(
                  color: Colors.grey[800],
                  borderRadius: BorderRadius.only(
                    topLeft: Radius.circular(8),
                    topRight: Radius.circular(8),
                  ),
                ),
                child: Table(
                  children: [
                    TableRow(children: [
                      Text("Description",
                          textAlign: TextAlign.center,
                          style: TextStyle(
                              color: Colors.white,
                              fontWeight: FontWeight.bold)),
                      Text("Quantity",
                          textAlign: TextAlign.center,
                          style: TextStyle(
                              color: Colors.white,
                              fontWeight: FontWeight.bold)),
                      Text("Price",
                          textAlign: TextAlign.center,
                          style: TextStyle(
                              color: Colors.white,
                              fontWeight: FontWeight.bold)),
                      Text("Total",
                          textAlign: TextAlign.center,
                          style: TextStyle(
                              color: Colors.white,
                              fontWeight: FontWeight.bold)),
                    ]),
                  ],
                ),
              ),
              Container(
                margin: EdgeInsets.only(top: 0.0, left: 10.0, right: 10.0),
                padding: EdgeInsets.only(
                    top: 10.0, left: 10.0, right: 10.0, bottom: 15.0),
                decoration: BoxDecoration(
                    color: Colors.white,
                    borderRadius: BorderRadius.only(
                      bottomLeft: Radius.circular(8),
                      bottomRight: Radius.circular(8),
                    )),
                child: Table(children: fullData(context)),
              ),
              Container(
                margin: EdgeInsets.only(top: 3.0, left: 12.0, right: 12.0),
                child: Divider(
                  color: Colors.grey[400],
                  thickness: 0.7,
                ),
              ),
              Container(
                child: AppExpandableNotifier(
                  title: "Total Price: " + grandTotal.toString() + " SAR",
                  isExpand: true,
                  bodyWidget: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        Table(
                          children: [
                            TableRow(children: [
                              Container(
                                margin: EdgeInsets.only(top: 10.0),
                                child: Text("Discount: ",
                                    textAlign: TextAlign.center,
                                    style: TextStyle(
                                        color: Colors.black,
                                        fontWeight: FontWeight.bold)),
                              ),
                              Container(
                                margin: EdgeInsets.only(top: 10.0),
                                child: Text(totalDiscount.toString() + " SAR",
                                    textAlign: TextAlign.center,
                                    style: TextStyle(
                                        color: Colors.black,
                                        fontWeight: FontWeight.bold)),
                              ),
                            ]),
                            TableRow(children: [
                              Container(
                                margin: EdgeInsets.only(top: 10.0),
                                child: Text(
                                    "VAT (" +
                                        dentalInvoiceDetailResponse
                                            .listEInvoiceForDental[0]
                                            .listConsultation[0]
                                            .vATPercentage
                                            .toString() +
                                        "%)",
                                    textAlign: TextAlign.center,
                                    style: TextStyle(
                                        color: Colors.black,
                                        fontWeight: FontWeight.bold)),
                              ),
                              Container(
                                margin: EdgeInsets.only(top: 10.0),
                                child: Text(totalVAT.toString() + " SAR",
                                    textAlign: TextAlign.center,
                                    style: TextStyle(
                                        color: Colors.black,
                                        fontWeight: FontWeight.bold)),
                              ),
                            ]),
                            TableRow(children: [
                              Container(
                                margin: EdgeInsets.only(top: 10.0),
                                child: Text("Total: ",
                                    textAlign: TextAlign.center,
                                    style: TextStyle(
                                        color: Colors.black,
                                        fontWeight: FontWeight.bold)),
                              ),
                              Container(
                                margin: EdgeInsets.only(top: 10.0),
                                child: Text(grandTotal.toString() + " SAR",
                                    textAlign: TextAlign.center,
                                    style: TextStyle(
                                        color: Colors.black,
                                        fontWeight: FontWeight.bold)),
                              ),
                            ]),
                            TableRow(children: [
                              Container(
                                margin: EdgeInsets.only(top: 10.0),
                                child: Text("Paid: ",
                                    textAlign: TextAlign.center,
                                    style: TextStyle(
                                        color: Colors.black,
                                        fontWeight: FontWeight.bold)),
                              ),
                              Container(
                                margin:
                                    EdgeInsets.only(top: 10.0, bottom: 10.0),
                                child: Text(grandTotal.toString() + " SAR",
                                    textAlign: TextAlign.center,
                                    style: TextStyle(
                                        color: Colors.black,
                                        fontWeight: FontWeight.bold)),
                              ),
                            ]),
                          ],
                        ),
                      ]),
                ),
              ),
              Container(
                margin: EdgeInsets.only(top: 3.0, left: 12.0, right: 12.0),
                child: Divider(
                  color: Colors.grey[400],
                  thickness: 0.7,
                ),
              ),
              Container(
                margin: EdgeInsets.only(top: 0.0, left: 10.0, right: 10.0),
                padding: EdgeInsets.only(
                    top: 10.0, left: 10.0, right: 10.0, bottom: 15.0),
                decoration: BoxDecoration(
                    color: Colors.white,
                    borderRadius: BorderRadius.all(Radius.circular(8))),
                child: Table(children: [
                  TableRow(children: [
                    Container(
                      margin: EdgeInsets.only(top: 10.0),
                      child: Text("Insurance: ",
                          textAlign: TextAlign.center,
                          style: TextStyle(
                              color: Colors.black,
                              fontWeight: FontWeight.bold)),
                    ),
                    Container(
                      margin: EdgeInsets.only(top: 10.0, bottom: 5.0),
                      child: Text(
                          dentalInvoiceDetailResponse
                              .listEInvoiceForDental[0].companyName,
                          textAlign: TextAlign.center,
                          style: TextStyle(
                              color: Colors.black,
                              fontWeight: FontWeight.bold)),
                    ),
                  ]),
                  TableRow(children: [
                    Container(
                      margin: EdgeInsets.only(top: 10.0),
                      child: Text("Insurance ID: ",
                          textAlign: TextAlign.center,
                          style: TextStyle(
                              color: Colors.black,
                              fontWeight: FontWeight.bold)),
                    ),
                    Container(
                      margin: EdgeInsets.only(top: 10.0, bottom: 10.0),
                      child: Text(
                          dentalInvoiceDetailResponse
                              .listEInvoiceForDental[0].insuranceID,
                          textAlign: TextAlign.center,
                          style: TextStyle(
                              color: Colors.black,
                              fontWeight: FontWeight.bold)),
                    ),
                  ]),
                ]),
              ),
              SizedBox(
                height: 100.0,
              ),
            ],
          ),
        ),
      ),
      bottomSheet: Container(
        width: MediaQuery.of(context).size.width,
        height: 70.0,
        margin: EdgeInsets.only(left: 15.0, right: 15.0, top: 10.0),
        child: Button(
          onTap: () {
            sendInvoiceEmail();
          },
          label: TranslationBase.of(context).sendEmail,
          backgroundColor: Colors.red[900],
        ),
      ),
    );
  }

  sendInvoiceEmail() {
    GifLoaderDialogUtils.showMyDialog(context);
    MyInvoicesService myInvoicesService = new MyInvoicesService();

    myInvoicesService
        .sendDentalAppointmentInvoiceEmail(
            12, listDentalAppointments.appointmentNo, context)
        .then((res) {
      GifLoaderDialogUtils.hideDialog(context);
      if (res['MessageStatus'] == 1) {
        AppToast.showSuccessToast(
            message: TranslationBase.of(context).emailSentSuccessfully);
      } else {
        AppToast.showErrorToast(message: res['ErrorEndUserMessage']);
      }
    }).catchError((err) {
      GifLoaderDialogUtils.hideDialog(context);
      print(err);
      AppToast.showErrorToast(message: err);
      Navigator.of(context).pop();
    });
  }

  List<TableRow> fullData(context) {
    List<TableRow> tableRow = [];
    dentalInvoiceDetailResponse.listEInvoiceForDental[0].listConsultation
        .forEach((lab) {
      tableRow.add(
        TableRow(children: [
          Container(
            margin: EdgeInsets.only(top: 10.0),
            child: Text(lab.procedureName,
                textAlign: TextAlign.center,
                style: TextStyle(
                    color: Colors.black, fontWeight: FontWeight.w400)),
          ),
          Container(
            margin: EdgeInsets.only(top: 10.0),
            child: Text(lab.quantity.toString(),
                textAlign: TextAlign.center,
                style: TextStyle(
                    color: Colors.black, fontWeight: FontWeight.w400)),
          ),
          Container(
            margin: EdgeInsets.only(top: 10.0),
            child: Text(lab.price.toString() + " SAR",
                textAlign: TextAlign.center,
                style: TextStyle(
                    color: Colors.black, fontWeight: FontWeight.w400)),
          ),
          Container(
            margin: EdgeInsets.only(top: 10.0),
            child: Text(lab.total.toString() + " SAR",
                textAlign: TextAlign.center,
                style: TextStyle(
                    color: Colors.black, fontWeight: FontWeight.w400)),
          ),
        ]),
      );
    });
    return tableRow;
  }
}
