import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/viewModel/InsuranceViewModel.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/In_patient/NoData.dart';
import 'package:doctor_app_flutter/utils/date-utils.dart';
import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart';
import 'package:doctor_app_flutter/widgets/patients/patient_service_title.dart';
import 'package:doctor_app_flutter/widgets/patients/profile/app_bar/patient-profile-app-bar.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:doctor_app_flutter/widgets/shared/user-guid/CusomRow.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import '../../config/config.dart';

class InsuranceApprovalsDetails extends StatefulWidget {
  PatiantInformtion? patient;
  int indexInsurance;
  String patientType;

  InsuranceApprovalsDetails({this.patient, this.indexInsurance = 0, this.patientType = ''});

  @override
  _InsuranceApprovalsDetailsState createState() => _InsuranceApprovalsDetailsState(patient: patient!, indexInsurance: indexInsurance, patientType: patientType);
}

class _InsuranceApprovalsDetailsState extends State<InsuranceApprovalsDetails> {
  PatiantInformtion? patient;
  int indexInsurance;
  String patientType;

  _InsuranceApprovalsDetailsState({this.patient, this.indexInsurance = 0, this.patientType = ''});

  @override
  Widget build(BuildContext context) {
    ProjectViewModel projectViewModel = Provider.of(context);
    // final routeArgs = ModalRoute.of(context)!.settings.arguments as Map;

    return BaseView<InsuranceViewModel>(
      onModelReady: (model) => model.insuranceApprovalInPatient.length == 0
          ? patient!.admissionNo != null
              ? (model) => model.getInsuranceInPatient(mrn: patient!.patientId)
              : patient!.appointmentNo != null
                  ? (model) => model.getInsuranceApproval(patient, appointmentNo: patient!.appointmentNo, projectId: patient!.projectId)
                  : (model) => model.getInsuranceApproval(patient)
          : null,
      builder: (BuildContext context, InsuranceViewModel model, Widget? child) => AppScaffold(
          isShowAppBar: true,
          baseViewModel: model,
          appBar: PatientProfileAppBar(patient!),
          body: patient!.admissionNo != null
              ? SingleChildScrollView(
                  child: Container(
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        ServiceTitle(
                          title: TranslationBase.of(context).insurance22,
                          subTitle: TranslationBase.of(context).approvals22,
                        ),
                        Container(
                          margin: EdgeInsets.all(10),
                          decoration: BoxDecoration(
                              border: Border.all(
                                width: 0.5,
                                color: Colors.white,
                              ),
                              borderRadius: BorderRadius.all(
                                Radius.circular(15.0),
                              ),
                              color: Colors.white),
                          child: Padding(
                            padding: const EdgeInsets.all(8.0),
                            child: Column(
                              children: [
                                Row(
                                  children: [
                                    AppText(
                                      model.insuranceApprovalInPatient[indexInsurance].approvalStatusDescption != null
                                          ? model.insuranceApprovalInPatient[indexInsurance].approvalStatusDescption ?? ""
                                          : "",
                                      color: model.insuranceApprovalInPatient[indexInsurance].approvalStatusDescption != null
                                          ? "${model.insuranceApprovalInPatient[indexInsurance].approvalStatusDescption}" == "Approved" ||
                                                  "${model.insuranceApprovalInPatient[indexInsurance].approvalStatusDescption}" == "تمت الموافقة"
                                              ? AppGlobal.appGreenColor
                                              : Color(0xffD02127)
                                          : Color(0xffD02127),
                                      letterSpacing: -0.4,
                                      fontWeight: FontWeight.w600,
                                      fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 2.7,
                                    ),
                                  ],
                                ),
                                Row(
                                  children: [
                                    AppText(
                                      model.insuranceApprovalInPatient[indexInsurance].doctorName!.toUpperCase(),
                                      color: Color(0xff2E303A),
                                      fontSize: 16,
                                      letterSpacing: -0.64,
                                      fontWeight: FontWeight.w600,
                                    )
                                  ],
                                ),
                                Padding(
                                  padding: const EdgeInsets.symmetric(horizontal: 8.0),
                                  child: Row(
                                    children: [
                                      Column(
                                        children: [
                                          Container(
                                            height: MediaQuery.of(context).size.height * 0.065,
                                            width: MediaQuery.of(context).size.height * 0.065,
                                            child: CircleAvatar(
                                              radius: SizeConfig.imageSizeMultiplier! * 12,
                                              //     radius: (52)
                                              child: ClipRRect(
                                                borderRadius: BorderRadius.circular(50),
                                                child: Image.network(
                                                  model.insuranceApprovalInPatient[indexInsurance].doctorImage??'',
                                                  fit: BoxFit.fill,
                                                  width: 700,
                                                ),
                                              ),
                                              backgroundColor: Colors.transparent,
                                            ),
                                          ),
                                        ],
                                      ),
                                      Expanded(
                                        child: Padding(
                                          padding: const EdgeInsets.symmetric(horizontal: 8.0),
                                          child: Column(
                                            crossAxisAlignment: CrossAxisAlignment.start,
                                            //mainAxisAlignment: MainAxisAlignment.center,
                                            children: [
                                              SizedBox(
                                                height: 25.0,
                                              ),
                                              CustomRow(
                                                label: TranslationBase.of(context).clinic + ": ",
                                                value: model.insuranceApprovalInPatient[indexInsurance].clinicName!,
                                              ),
                                              CustomRow(
                                                label: TranslationBase.of(context).approvalNo + ": ",
                                                value: model.insuranceApprovalInPatient[indexInsurance].approvalNo.toString(),
                                              ),
                                              CustomRow(
                                                label: 'Unused Count:',
                                                value: model.insuranceApprovalInPatient[indexInsurance].unUsedCount.toString(),
                                              ),
                                              CustomRow(label: TranslationBase.of(context).companyName + ": ", value: model.insuranceApprovalInPatient[indexInsurance].companyName.toString()),
                                              CustomRow(
                                                  label: TranslationBase.of(context).receiptOn + ": ",
                                                  value:
                                                      '${AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.getDateTimeFromServerFormat(model.insuranceApprovalInPatient[indexInsurance].receiptOn ?? ""), isArabic: projectViewModel.isArabic)}'),
                                              CustomRow(
                                                  label: TranslationBase.of(context).expiryDate + ": ",
                                                  value:
                                                      '${AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.getDateTimeFromServerFormat(model.insuranceApprovalInPatient[indexInsurance].expiryDate ?? ""), isArabic: projectViewModel.isArabic)}'),
                                            ],
                                          ),
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                                SizedBox(
                                  height: 20.0,
                                ),
                                Container(
                                  child: Column(
                                    children: [
                                      Padding(
                                        padding: const EdgeInsets.symmetric(horizontal: 8.0),
                                        child: Row(
                                          children: [
                                            Expanded(
                                              child: AppText(
                                                TranslationBase.of(context).procedure,
                                                fontWeight: FontWeight.w600,
                                                color: Color(0xff2E303A),
                                                letterSpacing: -0.48,
                                                fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 2.9,
                                              ),
                                            ),
                                            Expanded(
                                              child: AppText(
                                                TranslationBase.of(context).status,
                                                fontWeight: FontWeight.w600,
                                                color: Color(0xff2E303A),
                                                letterSpacing: -0.48,
                                                fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 2.9,
                                              ),
                                            ),
                                            Expanded(
                                              child: AppText(
                                                TranslationBase.of(context).usageStatus,
                                                fontWeight: FontWeight.w600,
                                                color: Color(0xff2E303A),
                                                letterSpacing: -0.48,
                                                fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 2.9,
                                              ),
                                            )
                                          ],
                                        ),
                                      ),
                                      Divider(
                                        color: Colors.black,
                                      ),
                                      Padding(
                                        padding: const EdgeInsets.symmetric(horizontal: 8.0),
                                        child: ListView.builder(
                                            shrinkWrap: true,
                                            physics: ScrollPhysics(),
                                            itemCount: model.insuranceApprovalInPatient[indexInsurance].apporvalDetails!.length,
                                            itemBuilder: (BuildContext context, int index) {
                                              return Container(
                                                child: Column(
                                                  children: [
                                                    Row(
                                                      children: [
                                                        Expanded(
                                                          child: Container(
                                                            child: AppText(
                                                              model.insuranceApprovalInPatient[indexInsurance]?.apporvalDetails![index]?.procedureName ?? "",
                                                              textAlign: TextAlign.center,
                                                              fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 2.7,
                                                              letterSpacing: -0.4,
                                                              color: Color(0xff575757),
                                                              fontWeight: FontWeight.w500,
                                                            ),
                                                          ),
                                                        ),
                                                        Expanded(
                                                          child: Container(
                                                            child: AppText(
                                                              model.insuranceApprovalInPatient[indexInsurance]?.apporvalDetails![index]?.status ?? "",
                                                              textAlign: TextAlign.center,
                                                              fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 2.7,
                                                              letterSpacing: -0.4,
                                                              color: Color(0xff575757),
                                                              fontWeight: FontWeight.w500,
                                                            ),
                                                          ),
                                                        ),
                                                        Expanded(
                                                          child: Container(
                                                            child: AppText(
                                                              model.insuranceApprovalInPatient[indexInsurance]?.apporvalDetails![index]?.isInvoicedDesc ?? "",
                                                              textAlign: TextAlign.center,
                                                              fontSize: SizeConfig.getTextMultiplierBasedOnWidth() * 2.7,
                                                              letterSpacing: -0.4,
                                                              color: Color(0xff575757),
                                                              fontWeight: FontWeight.w500,
                                                            ),
                                                          ),
                                                        ),
                                                      ],
                                                    ),
                                                    SizedBox(
                                                      width: 5,
                                                    ),
                                                    Divider(
                                                      color: Colors.black38,
                                                    ),
                                                  ],
                                                ),
                                              );
                                            }),
                                      ),
                                    ],
                                  ),
                                ),
                              ],
                            ),
                          ),
                        ),
                      ],
                    ),
                  ),
                )
              : SingleChildScrollView(
                  child: Container(
                    child: Column(
                      children: [
                        Padding(
                          padding: const EdgeInsets.all(8.0),
                          child: Column(
                            children: [
                              Row(
                                children: [
                                  AppText(
                                    TranslationBase.of(context).insurance22,
                                    fontSize: 15.0,
                                    fontWeight: FontWeight.w600,
                                    fontFamily: 'Poppins',
                                  ),
                                ],
                              ),
                              Row(
                                children: [
                                  AppText(
                                    TranslationBase.of(context).approvals22,
                                    fontSize: 30.0,
                                    fontWeight: FontWeight.w700,
                                  ),
                                ],
                              ),
                            ],
                          ),
                        ),
                        Container(
                          margin: EdgeInsets.all(10),
                          decoration: BoxDecoration(
                              border: Border.all(
                                width: 0.5,
                                color: Colors.white,
                              ),
                              borderRadius: BorderRadius.all(
                                Radius.circular(15.0),
                              ),
                              color: Colors.white),
                          child: Padding(
                            padding: const EdgeInsets.all(8.0),
                            child: Column(
                              children: [
                                Row(
                                  children: [
                                    AppText(
                                      model.insuranceApproval[indexInsurance].approvalStatusDescption != null ? model.insuranceApproval[indexInsurance].approvalStatusDescption ?? "" : "",
                                      color: model.insuranceApproval[indexInsurance].approvalStatusDescption != null
                                          ? "${model.insuranceApproval[indexInsurance].approvalStatusDescption}" == "Approved"
                                              ? AppGlobal.appGreenColor
                                              : Color(0xffD02127)
                                          : Color(0xffD02127),
                                    ),
                                  ],
                                ),
                                Row(
                                  children: [
                                    AppText(
                                      model.insuranceApproval[indexInsurance].doctorName!.toUpperCase(),
                                      color: Colors.black,
                                      fontSize: 18,
                                      fontWeight: FontWeight.bold,
                                    )
                                  ],
                                ),
                                Padding(
                                  padding: const EdgeInsets.symmetric(horizontal: 8.0),
                                  child: Row(
                                    children: [
                                      Column(
                                        children: [
                                          Container(
                                            height: 85.0,
                                            width: 85.0,
                                            child: CircleAvatar(
                                              radius: SizeConfig.imageSizeMultiplier! * 12,
                                              //     radius: (52)
                                              child: ClipRRect(
                                                borderRadius: BorderRadius.circular(50),
                                                child: Image.network(
                                                  model.insuranceApproval[indexInsurance].doctorImage!,
                                                  fit: BoxFit.fill,
                                                  width: 700,
                                                ),
                                              ),
                                              backgroundColor: Colors.transparent,
                                            ),
                                          ),
                                        ],
                                      ),
                                      Expanded(
                                        child: Padding(
                                          padding: const EdgeInsets.symmetric(horizontal: 8.0),
                                          child: Column(
                                            crossAxisAlignment: CrossAxisAlignment.start,
                                            //mainAxisAlignment: MainAxisAlignment.center,
                                            children: [
                                              SizedBox(
                                                height: 25.0,
                                              ),
                                              Row(
                                                children: [
                                                  AppText(
                                                    TranslationBase.of(context).clinic + ": ",
                                                    color: Colors.grey[500],
                                                    fontSize: 14,
                                                  ),
                                                  Expanded(
                                                    child: AppText(
                                                      model.insuranceApproval[indexInsurance].clinicName!,
                                                      fontSize: 14,
                                                    ),
                                                  )
                                                ],
                                              ),
                                              Row(
                                                children: <Widget>[
                                                  AppText(
                                                    TranslationBase.of(context).approvalNo + ": ",
                                                    color: Colors.grey[500],
                                                    fontSize: 14,
                                                  ),
                                                  AppText(
                                                    model.insuranceApproval[indexInsurance].approvalNo.toString(),
                                                    fontSize: 14,
                                                  )
                                                ],
                                              ),
                                              Row(
                                                children: <Widget>[
                                                  AppText(
                                                    TranslationBase.of(context).unusedCount + ": ",
                                                    color: Colors.grey[500],
                                                    fontSize: 14,
                                                  ),
                                                  AppText(
                                                    model.insuranceApproval[indexInsurance].unUsedCount.toString(),
                                                    fontSize: 14,
                                                  )
                                                ],
                                              ),
                                              Row(
                                                children: <Widget>[
                                                  AppText(
                                                    TranslationBase.of(context).companyName + ": ",
                                                    color: Colors.grey[500],
                                                  ),
                                                  Expanded(child: AppText(projectViewModel.isArabic?model.insuranceApproval[indexInsurance].companyNameN??'':model.insuranceApproval[indexInsurance].companyName??''))
                                                ],
                                              ),
                                              model.insuranceApproval[indexInsurance].rceiptOn != null
                                                  ? Row(
                                                      children: [
                                                        AppText(
                                                    TranslationBase.of(context).receiptOn + ": ",
                                                    color: Colors.grey[500],
                                                  ),
                                                  Expanded(
                                                    child: AppText(
                                                      '${AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.getDateTimeFromServerFormat(model.insuranceApproval[indexInsurance].rceiptOn!), isArabic: projectViewModel.isArabic)}',
                                                      color: Colors.black,
                                                      fontWeight: FontWeight.w600,
                                                    ),
                                                  ),
                                                ],
                                                    )
                                                  : SizedBox.shrink(),
                                              Row(
                                                children: [
                                                  AppText(
                                                    TranslationBase.of(context).expiryDate + ": ",
                                                    color: Colors.grey[500],
                                                  ),
                                                  if (model.insuranceApproval[indexInsurance].expiryDate != null)
                                                    AppText(
                                                      '${AppDateUtils.getDayMonthYearDateFormatted(AppDateUtils.getDateTimeFromServerFormat(model.insuranceApproval[indexInsurance].expiryDate!), isArabic: projectViewModel.isArabic)}',
                                                      color: Colors.black,
                                                      fontWeight: FontWeight.w600,
                                                    ),
                                                ],
                                              ),
                                            ],
                                          ),
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                                SizedBox(
                                  height: 20.0,
                                ),
                                Container(
                                  child: Column(
                                    children: [
                                      Padding(
                                        padding: const EdgeInsets.symmetric(horizontal: 8.0),
                                        child: Row(
                                          children: [
                                            Expanded(
                                              child: AppText(
                                                TranslationBase.of(context).procedure,
                                                fontWeight: FontWeight.w700,
                                              ),
                                            ),
                                            Expanded(
                                              child: AppText(
                                                TranslationBase.of(context).status,
                                                fontWeight: FontWeight.w700,
                                              ),
                                            ),
                                            Expanded(
                                              child: AppText(
                                                TranslationBase.of(context).usageStatus,
                                                fontWeight: FontWeight.w700,
                                              ),
                                            )
                                          ],
                                        ),
                                      ),
                                      Divider(
                                        color: Colors.black,
                                      ),
                                      Padding(
                                        padding: const EdgeInsets.symmetric(horizontal: 8.0),
                                        child: (model.insuranceApproval[indexInsurance].apporvalDetails != null && model.insuranceApproval[indexInsurance].apporvalDetails!.isNotEmpty)
                                            ? ListView.builder(
                                                shrinkWrap: true,
                                                physics: ScrollPhysics(),
                                                itemCount: model.insuranceApproval[indexInsurance].apporvalDetails!.length,
                                                itemBuilder: (BuildContext context, int index) {
                                                  return Container(
                                                    child: Column(
                                                      children: [
                                                        Row(
                                                          children: [
                                                            Expanded(
                                                              child: Container(
                                                                child: AppText(
                                                                  model.insuranceApproval[indexInsurance]?.apporvalDetails![index]?.procedureName ?? "",
                                                                  textAlign: TextAlign.start,
                                                                ),
                                                              ),
                                                            ),
                                                            Expanded(
                                                              child: Container(
                                                                child: AppText(
                                                                  model.insuranceApproval[indexInsurance]?.apporvalDetails![index]?.status ?? "",
                                                                  textAlign: TextAlign.center,
                                                                ),
                                                              ),
                                                            ),
                                                            Expanded(
                                                              child: Container(
                                                                child: AppText(
                                                                  model.insuranceApproval[indexInsurance]?.apporvalDetails![index]?.isInvoicedDesc ?? "",
                                                                  textAlign: TextAlign.center,
                                                                ),
                                                              ),
                                                            ),
                                                          ],
                                                        ),
                                                        SizedBox(
                                                          width: 5,
                                                        ),
                                                        Divider(
                                                          color: Colors.black38,
                                                        ),
                                                      ],
                                                    ),
                                                  );
                                                })
                                            : NoData(),
                                      ),
                                    ],
                                  ),
                                ),
                              ],
                            ),
                          ),
                        ),
                      ],
                    ),
                  ),
                )),
    );
  }
}
