import 'dart:convert';

import 'package:carousel_slider/carousel_slider.dart';
import 'package:flutter/material.dart';
import 'package:doctor/patient_dashboard/Reports/add_reports.dart';
import 'package:doctor/patient_dashboard/Reports/update_report.dart';
import 'package:doctor/common/settings.dart';
import 'package:doctor/common/zoom_image.dart';
import 'package:doctor/models/reports_model.dart';
import 'package:doctor/patient_dashboard/Reports/all-records_onclick_new.dart';
import 'package:intl/intl.dart';

class AllReports extends StatefulWidget {
  String? customerId;
  String? patName;
  String? patAge;
  String? patGender;
  AllReports({this.customerId,this.patName,this.patAge,this.patGender});

  @override
  State<AllReports> createState() => _AllReportsState();
}

class _AllReportsState extends State<AllReports> {


  List<ReportsModel> reportsList = [];
  List<ReportsModel> reportsListOriginal = [];
  bool isReportsDataLoading = false;
  bool isSereverIssue = false;
  TextEditingController searchController = TextEditingController();
  TextEditingController dateInput = TextEditingController();
  TextEditingController fromdateController = TextEditingController();
  TextEditingController todateController = TextEditingController();
  DateTime fromDate=DateTime.now();
  String dropdownSearchType = 'Problem';
  String? searchBy;
  var typeOfSearchItems = [
    'Problem',
    'Doctor',
    'Date',
  ];
  final List<String> imgList = [
    'images/mobilebg.png',
    'images/mobilebg2.png',
    'images/mobilebg3.png'
  ];
  List images = ['img1', 'img2', 'img3'];

  Future<void> getAllRecords() async {
    isReportsDataLoading=true;
    try {
      var response = await AppSettings.getAllRecords(widget.customerId);

      setState(() {
        reportsListOriginal = ((jsonDecode(response)) as List)
            .map((dynamic model) {
          return ReportsModel.fromJson(model);
        }).toList();
        reportsList=reportsListOriginal.reversed.toList();
        isReportsDataLoading = false;
      });
    } catch (e) {
      setState(() {
        isReportsDataLoading = false;
        isSereverIssue = true;
      });
    }
  }

  Future<void> getRecordsByProblemName(var problem) async {

    isReportsDataLoading=true;
    try {
      var response = await AppSettings.getAllRecords(widget.customerId);

      setState(() {
        reportsListOriginal = ((jsonDecode(response)) as List)
            .map((dynamic model) {
          return ReportsModel.fromJson(model);
        }).toList();
        reportsList=reportsListOriginal.reversed.toList();
        reportsList= reportsListOriginal.where(
                (x) => x.problem.toString().toLowerCase().contains(problem.toString().toLowerCase())
        ).toList();
        isReportsDataLoading = false;
      });
    } catch (e) {
      setState(() {
        isReportsDataLoading = false;
        isSereverIssue = true;
      });
    }
  }

  Future<void> getRecordsByDoctorName(var doctor) async {

    isReportsDataLoading=true;
    try {
      var response = await AppSettings.getAllRecords(widget.customerId);

      setState(() {
        reportsListOriginal = ((jsonDecode(response)) as List)
            .map((dynamic model) {
          return ReportsModel.fromJson(model);
        }).toList();
        reportsList=reportsListOriginal.reversed.toList();
        reportsList= reportsListOriginal.where(
                (x) => x.doctorName.toString().toLowerCase().contains(doctor.toString().toLowerCase())
        ).toList();
        isReportsDataLoading = false;
      });
    } catch (e) {
      setState(() {
        isReportsDataLoading = false;
        isSereverIssue = true;
      });
    }
  }

  Future<void> getRecordsByDate(var date) async {

    isReportsDataLoading=true;
    try {
      var response = await AppSettings.getAllRecords(widget.customerId);

      setState(() {
        reportsListOriginal = ((jsonDecode(response)) as List)
            .map((dynamic model) {
          return ReportsModel.fromJson(model);
        }).toList();
        reportsList=reportsListOriginal.reversed.toList();
        reportsList= reportsListOriginal.where(
                (x) => x.date.toString().toLowerCase().contains(date.toString().toLowerCase())
        ).toList();
        isReportsDataLoading = false;
      });
    } catch (e) {
      setState(() {
        isReportsDataLoading = false;
        isSereverIssue = true;
      });
    }
  }

  Future<void> getRecordsByDateRange(var fromDate,var toDate) async {
    isReportsDataLoading = true;

    try {
      var response = await AppSettings.getAllRecords(widget.customerId);

      setState(() {
        reportsListOriginal = ((jsonDecode(response)) as List)
            .map((dynamic model) {
          return ReportsModel.fromJson(model);
        }).toList();
        reportsList=reportsListOriginal.reversed.toList();
        var dateToCheck = DateTime.now().add(Duration(days: -1));

        reportsList = reportsListOriginal.reversed.where((product) {
          final date = product.dateForFilter;
          final startDate =DateFormat('dd-MM-yyyy').parse(fromDate);
          final endDate = DateFormat('dd-MM-yyyy').parse(toDate);
          return date.isAfter(startDate) && date.isBefore(endDate);

          //reportsList=reportsListOriginal.reversed.toList();
        }).toList();

        /*if( dateToCheck.isAfter(startDate) && dateToCheck.isBefore(endDate))
        {
          print("dateToCheck is between now and lastYear");
        }
        else
        {
          print("dateToCheck is not between now and lastYear");
        }*/


        isReportsDataLoading = false;
      });
    } catch (e) {
      setState(() {
        isReportsDataLoading = false;
        isSereverIssue = true;
      });
    }
  }

  @override
  void initState() {
    getAllRecords();
    var now = new DateTime.now();
    String formattedDate = DateFormat('dd-MM-yyyy').format(now);
    fromdateController.text=formattedDate;
    todateController.text=formattedDate;
    super.initState();
  }

  Widget findings(var obj){
    return Container(
      width: double.infinity,
      height: MediaQuery.of(context).size.height * .20,
      child: ListView.builder(
          scrollDirection: Axis.horizontal,
          itemCount: obj.findingsImages.length,
          itemBuilder: (context, index) {
            return Column(
              children: [
                Card(
                  child: GestureDetector(
                    onTap: (){
                      /*showPicDialog(obj.findingsImages[index]['url']);*/
                      Navigator.push(
                          context,
                          new MaterialPageRoute(
                              builder: (__) => new ImageZoomPage(imageName:'Findings',imageDetails:obj.findingsImages[index]['url'])));
                    },
                    child: Container(
                      width: MediaQuery.of(context).size.width *
                          .30,
                      height:
                      MediaQuery.of(context).size.height *
                          .15,
                      decoration: BoxDecoration(
                          shape: BoxShape.rectangle,
                          image: DecorationImage(
                              image: NetworkImage(
                                  obj.findingsImages[index]['url'])
                              as ImageProvider, // picked file
                              fit: BoxFit.fill)),
                    ),
                  ),
                ),
                /*Expanded(child:IconButton(
                                    icon: const Icon(Icons.remove,color: Colors.red,),

                                    onPressed: () async{

                                    },
                                  ),)*/
              ],
            );
          }),
    );
  }

  Widget reports(var obj){

    return Container(
      width: double.infinity,
      height: MediaQuery.of(context).size.height * .20,
      child: ListView.builder(
          scrollDirection: Axis.horizontal,
          itemCount: obj.reportImages.length,
          itemBuilder: (context, index) {
            return Column(
              children: [
                Card(
                  child: GestureDetector(
                    onTap: (){
                      //showPicDialog(obj.reportImages[index]['url']);

                      Navigator.push(
                          context,
                          new MaterialPageRoute(
                              builder: (__) => new ImageZoomPage(imageName:'Reports',imageDetails:obj.reportImages[index]['url'])));

                    },
                    child: Container(
                      width: MediaQuery.of(context).size.width * .30,
                      height: MediaQuery.of(context).size.height * .15,
                      decoration: BoxDecoration(
                          shape: BoxShape.rectangle,
                          image: DecorationImage(
                              image: NetworkImage(
                                  obj.reportImages[index]
                                  ['url'])
                              as ImageProvider, // picked file
                              fit: BoxFit.fill)),
                    ),
                  ),
                ),
                /*Expanded(child:IconButton(
                                    icon: const Icon(Icons.remove,color: Colors.red,),

                                    onPressed: () async{

                                    },
                                  ),)*/
              ],
            );
          }),
    );

  }

  Widget prescriptions(var obj){

    return Container(
      width: double.infinity,
      height: MediaQuery.of(context).size.height * .20,
      child: ListView.builder(
          scrollDirection: Axis.horizontal,
          itemCount: obj.prescriptionImages.length,
          itemBuilder: (context, index) {
            return Column(
              children: [
                Card(
                  child: GestureDetector(
                    onTap: (){
                      //showPicDialog(obj.prescriptionImages[index]['url']);
                      Navigator.push(
                          context,
                          new MaterialPageRoute(
                              builder: (__) => new ImageZoomPage(imageName:'Prescriptions',imageDetails:obj.prescriptionImages[index]['url'])));



                    },
                    child: Container(
                      width: MediaQuery.of(context).size.width * .30,
                      height: MediaQuery.of(context).size.height * .15,
                      decoration: BoxDecoration(
                          shape: BoxShape.rectangle,
                          image: DecorationImage(
                              image: NetworkImage(
                                  obj.prescriptionImages[index]
                                  ['url'])
                              as ImageProvider, // picked file
                              fit: BoxFit.fill)),
                    ),
                  ),
                ),
                /*Expanded(child:IconButton(
                                    icon: const Icon(Icons.remove,color: Colors.red,),

                                    onPressed: () async{

                                    },
                                  ),)*/
              ],
            );
          }),
    );

  }

  Widget _filtereddata(){
    if(reportsList.length!=0){



      reportsList.sort((a, b) => b.date.compareTo(a.date));
     return ListView.separated(
         padding:  EdgeInsets.all(0),
         itemCount: reportsList.length,
         separatorBuilder: (context, index) {
           if ((index + 1) % 2 == 0) {
             return  CarouselSlider(
               options: CarouselOptions(
                 height: MediaQuery.of(context).size.height * .200,
                 aspectRatio: 16 / 9,
                 viewportFraction: 0.8,
                 initialPage: 0,
                 enableInfiniteScroll: true,
                 reverse: false,
                 autoPlay: true,
                 autoPlayInterval: Duration(seconds: 3),
                 autoPlayAnimationDuration: Duration(milliseconds: 800),
                 autoPlayCurve: Curves.ease,
                 enlargeCenterPage: true,
                 enlargeFactor: 0.2,
                 scrollDirection: Axis.horizontal,
               ),
               items: imgList.map((i) {
                 return Builder(
                   builder: (BuildContext context) {
                     return Container(
                         height: MediaQuery.of(context).size.height * .250,
                         width: double.infinity,
                         decoration: BoxDecoration(
                           borderRadius: BorderRadius.circular(0),
                         ),
                         //color: Colors.red,
                         child: FittedBox(
                           child: Image(
                             image: AssetImage(i),
                           ),
                           fit: BoxFit.fill,
                         ));
                   },
                 );
               }).toList(),
             );
           } else {
             return Container();
           }
         },
         itemBuilder: (BuildContext context, int index) {
           if(reportsList[index].patient_type.toString().toLowerCase()=='self'){
             reportsList[index].age=widget.patAge!;
             reportsList[index].gender=widget.patGender!;
             reportsList[index].patient_name=widget.patName!;
           }
           else{
             reportsList[index].age=reportsList[index].age;
             reportsList[index].gender=reportsList[index].gender;
             reportsList[index].patient_name=reportsList[index].patient_name;
           }
           return GestureDetector(
             onTap: (){

               Navigator.push(
                   context,
                   new MaterialPageRoute(
                       builder: (__) => new AllRecordsOnClick(recordDetails:reportsList[index],initialIndex: 0,))).then((value) {
                 getAllRecords();
               });
             },
             child: Card(

               //color: prescriptionsList[index].cardColor,
               child: Padding(
                 padding:EdgeInsets.all(8) ,
                 child: Column(
                   crossAxisAlignment: CrossAxisAlignment.start,
                   children: [
                     Row(
                       mainAxisAlignment: MainAxisAlignment.spaceBetween,
                       crossAxisAlignment: CrossAxisAlignment.center,
                       children: [

                         Container(
                           width: MediaQuery.of(context).size.width * .55,
                           child: Column(
                             mainAxisAlignment: MainAxisAlignment.start,
                             crossAxisAlignment: CrossAxisAlignment.start,
                             children: [
                               Text('Problem: '+reportsList[index].problem.toString().toUpperCase(),style: problemTextStyle()),
                               Text(reportsList[index].doctorName.toString().toUpperCase(),style: valuesTextStyle()),
                               Text(reportsList[index].hospitalName.toString().toUpperCase(),style: valuesTextStyle()),
                               Text(reportsList[index].date.toString().toUpperCase(),style: valuesTextStyle()),
                               Text('Patient details: ',style: problemTextStyle()),
                               Text(reportsList[index].patient_name.toString().toUpperCase(),style: valuesTextStyle()),
                               Row(
                                 children: [
                                   Text(reportsList[index].gender.toString().toUpperCase(),style: valuesTextStyle()),
                                   SizedBox(width:MediaQuery.of(context).size.width * .05,),
                                   Text(reportsList[index].age.toString().toUpperCase()+" Yrs",style: valuesTextStyle()),
                                 ],
                               ),


                             ],
                           ),


                         ),


                         Expanded(child:IconButton(
                           icon: const Icon(Icons.edit,color: primaryColor,),
                           onPressed: () {

                             Navigator.push(
                                 context,
                                 new MaterialPageRoute(
                                     builder: (__) => new UpdateReport(reportDetails:reportsList[index]))).then((value) {
                               getAllRecords();
                             });
                           },
                         ),),
                         Expanded(child:IconButton(
                           icon: const Icon(Icons.delete,color: primaryColor,),

                           onPressed: () async{
                             showDialog(
                               //if set to true allow to close popup by tapping out of the popup
                               //barrierDismissible: false,
                               context: context,
                               builder: (BuildContext context) => AlertDialog(
                                 title: const Text('Do you want to delete Record?',
                                     style: TextStyle(
                                       color: primaryColor,
                                       fontSize: 20,
                                     )),
                                 actionsAlignment: MainAxisAlignment.spaceBetween,
                                 actions: [
                                   TextButton(
                                     onPressed: ()async {

                                       bool deleteTankStatus = await AppSettings.deleteRecord(reportsList[index].recordId);


                                       if(deleteTankStatus){
                                         getAllRecords();
                                         AppSettings.longSuccessToast('Record deleted successfully');
                                         Navigator.of(context).pop(true);

                                       }
                                       else{
                                         AppSettings.longFailedToast('Record deletion failed');
                                         Navigator.of(context).pop(true);
                                       }
                                     },
                                     child: const Text('Yes',
                                         style: TextStyle(
                                           color: primaryColor,
                                           fontSize: 20,
                                         )),
                                   ),
                                   TextButton(
                                     onPressed: () {
                                       Navigator.of(context).pop(true);
                                     },
                                     child: const Text('No',
                                         style: TextStyle(
                                           color: primaryColor,
                                           fontSize: 20,
                                         )),
                                   ),
                                 ],
                               ),
                             );



                           },
                         ),)

                       ],

                     ),

                     Row(
                       children: [
                         ElevatedButton(
                           style: ElevatedButton.styleFrom(
                             primary: primaryColor, // background
                             onPrimary: Colors.white, // foreground
                           ),
                           onPressed: () async {
                             Navigator.push(
                                 context,
                                 new MaterialPageRoute(
                                     builder: (__) => new AllRecordsOnClick(recordDetails:reportsList[index],initialIndex: 0,))).then((value) {
                               getAllRecords();
                             });
                             /*Navigator.push(
                                 context,
                                 new MaterialPageRoute(
                                     builder: (__) => new AllReportsTab(recordDetails:reportsList[index],initialIndex: 0,))).then((value) {
                               getAllRecords();
                             });*/
                           },
                           child:  Text('Findings: '+reportsList[index].findingsImages.length.toString(),style:textButtonStyleReports(),),
                         ),
                         SizedBox(
                           width:MediaQuery.of(context).size.width * .05,
                         ),
                         ElevatedButton(
                           style: ElevatedButton.styleFrom(
                             primary: primaryColor, // background
                             onPrimary: Colors.white, // foreground
                           ),
                           onPressed: () async {
                             Navigator.push(
                                 context,
                                 new MaterialPageRoute(
                                     builder: (__) => new AllRecordsOnClick(recordDetails:reportsList[index],initialIndex: 0,))).then((value) {
                               getAllRecords();
                             });
                             /*Navigator.push(
                                 context,
                                 new MaterialPageRoute(
                                     builder: (__) => new AllReportsTab(recordDetails:reportsList[index],initialIndex: 1,))).then((value) {
                               getAllRecords();
                             });*/

                           },
                           child:  Text('Reports: '+reportsList[index].reportImages.length.toString(),style:textButtonStyleReports()),
                         ),
                         SizedBox(
                           width:MediaQuery.of(context).size.width * .05,
                         ),
                         ElevatedButton(
                           style: ElevatedButton.styleFrom(
                             primary: primaryColor, // background
                             onPrimary: Colors.white, // foreground
                           ),
                           onPressed: () async {
                             Navigator.push(
                                 context,
                                 new MaterialPageRoute(
                                     builder: (__) => new AllRecordsOnClick(recordDetails:reportsList[index],initialIndex: 0,))).then((value) {
                               getAllRecords();
                             });

                             /*Navigator.push(
                                 context,
                                 new MaterialPageRoute(
                                     builder: (__) => new AllReportsTab(recordDetails:reportsList[index],initialIndex: 2,))).then((value) {
                               getAllRecords();
                             });*/

                           },
                           child:  Text('Prescriptions: '+reportsList[index].prescriptionImages.length.toString(),style:textButtonStyleReports()),
                         ),
                       ],
                     ),



                     Visibility(
                       visible: false,
                       child: Text('Findings',style: headingsTextStyle()),),
                     Visibility(
                         visible: false,
                         child: findings(reportsList[index])),
                     Visibility(
                       visible: false,
                       child: Text('Reports',style: headingsTextStyle()),),
                     Visibility(
                         visible: false,
                         child:reports(reportsList[index]) ),
                     Visibility(
                       visible: false,
                       child: Text('Prescriptions',style: headingsTextStyle()),),
                     Visibility(
                         visible:false,
                         child:prescriptions(reportsList[index]) ),
                   ],
                 ),
               ),
             ),
           );
         });
    }
    else{
      return   Padding(padding: EdgeInsets.fromLTRB(60,10,60,10),
      child: Column(
        children: [
          Text('No records found related to your search'),
          SizedBox(
            height: 20,
          ),
          CircleAvatar(
            backgroundColor: Colors.red,
            radius: 30,
            child: const Icon(
              Icons.info,
              color: Colors.white,
            ),
          )
        ],
      ),);

    }
  }


  Widget _allreports(){

    if(reportsListOriginal.length!=0){

      return  Column(
          crossAxisAlignment: CrossAxisAlignment.end,
          children: [
            /*Container(
              padding: const EdgeInsets.fromLTRB(10, 10, 10, 0),
              child: DropdownButtonFormField(
                // Initial Value
                value: dropdownSearchType,
                isExpanded: true,
                decoration: const InputDecoration(
                  prefixIcon: Icon(
                    Icons.search,
                    color: greyColor,
                  ),
                  border: OutlineInputBorder(
                      borderSide: BorderSide(color: greyColor)),
                  focusedBorder: OutlineInputBorder(
                    borderSide: BorderSide(color: greyColor),
                  ),
                  enabledBorder: OutlineInputBorder(
                    borderSide: BorderSide(color: greyColor),
                  ),
                  labelText: 'Search By',
                  labelStyle: TextStyle(
                    color: greyColor, //<-- SEE HERE
                  ),
                ),

                hint: Text('Select Search Type'),
                // Down Arrow Icon
                icon: const Icon(Icons.keyboard_arrow_down),

                // Array list of items
                items: typeOfSearchItems.map((String items) {
                  return DropdownMenuItem(
                    value: items,
                    child: Text(items),
                  );
                }).toList(),
                // After selecting the desired option,it will
                // change button value to selected value
                onChanged: (String? newValue) {
                  setState(() {
                    dropdownSearchType = newValue!;
                  });
                },
              ),
            ),*/
            Container(
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                mainAxisAlignment: MainAxisAlignment.start,
                children: [
                  Padding(padding: EdgeInsets.fromLTRB(10,10,0,0),
                  child: Text('Please select search option',style: TextStyle(color: Colors.red,fontWeight: FontWeight.bold,fontSize: 16),),),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.start,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Expanded(
                        child: RadioListTile(
                          title: Text("Problem", style: TextStyle(fontSize: 10)),
                          value: "problem",
                          groupValue: searchBy,
                          activeColor: primaryColor,
                          onChanged: (value) {
                            setState(() {
                              searchBy = value.toString();
                            });
                          },
                        ),
                      ),
                      Expanded(
                        child: RadioListTile(
                          title: Text(
                            "Doctor",
                            style: TextStyle(fontSize: 10),
                          ),
                          value: "doctor",
                          groupValue: searchBy,
                          activeColor: primaryColor,
                          onChanged: (value) {
                            setState(() {
                              searchBy = value.toString();
                            });
                          },
                        ),
                      ),
                      Expanded(
                        child: RadioListTile(
                          title:
                          Text("Date", style: TextStyle(fontSize: 10)),
                          value: "date",
                          groupValue: searchBy,
                          activeColor: primaryColor,
                          onChanged: (value) {
                            setState(() {
                              searchBy = value.toString();
                            });
                          },
                        ),
                      ),
                    ],
                  ),
                ],
              )

            ),
            Visibility(
              visible:searchBy.toString().toLowerCase()=='problem' ,
              child: Container(
                height: MediaQuery.of(context).size.height * .07,
                padding:  EdgeInsets.all(5),
                child: Center(child: TextField(

                  cursorColor: primaryColor,
                  controller: searchController,
                  onChanged: (string) {
                    if(string.length>=1){
                      getRecordsByProblemName(string);
                    }
                    else{
                      getAllRecords();
                    }
                  },
                  decoration:  InputDecoration(
                    prefixIcon: Icon(
                      Icons.search,
                      color: primaryColor,
                    ),
                    /*suffixIcon: Icon(
                              Icons.clear,
                              color: greyColor,
                            ),*/
                    suffixIcon: searchController.text!=''?IconButton(
                      icon:  Icon(
                        Icons.clear,
                        color: Colors.red,
                      ),
                      onPressed: () {
                        setState(() {
                          searchController.text='';
                        });
                        getAllRecords();
                      },
                    ):IconButton(
                      icon:  Icon(
                        Icons.clear,
                        color: Colors.transparent,
                      ),
                      onPressed: () {
                      },
                    ),
                    border: OutlineInputBorder(
                      borderSide: BorderSide(color: primaryColor),
                      borderRadius: BorderRadius.circular(30),
                    ),
                    focusedBorder: OutlineInputBorder(
                      borderSide: BorderSide(color: primaryColor),
                      borderRadius: BorderRadius.circular(30),
                    ),
                    enabledBorder: OutlineInputBorder(
                      borderSide: BorderSide(color: primaryColor),
                      borderRadius: BorderRadius.circular(30),
                    ),
                    //labelText: 'Search by phone number',
                    hintText: 'Search by problem',
                    labelStyle: TextStyle(
                      color: greyColor, //<-- SEE HERE
                    ),
                  ),
                ),)
            ),),
            Visibility(
              visible:searchBy.toString().toLowerCase()=='doctor' ,
              child: Container(
                  height: MediaQuery.of(context).size.height * .07,
                  padding:  EdgeInsets.all(5),
                  child: Center(child: TextField(

                    cursorColor: primaryColor,
                    controller: searchController,
                    onChanged: (string) {
                      if(string.length>=1){
                        getRecordsByDoctorName(string);
                      }
                      else{
                        getAllRecords();
                      }
                    },
                    decoration:  InputDecoration(
                      prefixIcon: Icon(
                        Icons.search,
                        color: primaryColor,
                      ),
                      /*suffixIcon: Icon(
                              Icons.clear,
                              color: greyColor,
                            ),*/
                      suffixIcon: searchController.text!=''?IconButton(
                        icon:  Icon(
                          Icons.clear,
                          color: Colors.red,
                        ),
                        onPressed: () {
                          setState(() {
                            searchController.text='';
                          });
                          getAllRecords();
                        },
                      ):IconButton(
                        icon:  Icon(
                          Icons.clear,
                          color: Colors.transparent,
                        ),
                        onPressed: () {
                        },
                      ),
                      border: OutlineInputBorder(
                        borderSide: BorderSide(color: primaryColor),
                        borderRadius: BorderRadius.circular(30),
                      ),
                      focusedBorder: OutlineInputBorder(
                        borderSide: BorderSide(color: primaryColor),
                        borderRadius: BorderRadius.circular(30),
                      ),
                      enabledBorder: OutlineInputBorder(
                        borderSide: BorderSide(color: primaryColor),
                        borderRadius: BorderRadius.circular(30),
                      ),
                      //labelText: 'Search by phone number',
                      hintText: 'Search by doctor',
                      labelStyle: TextStyle(
                        color: greyColor, //<-- SEE HERE
                      ),
                    ),
                  ),)
              ),),
            Visibility(
              visible:searchBy.toString().toLowerCase()=='date',
              child: Container(
                //height: 60,
                padding:  EdgeInsets.all(5),
                child: Row(
                  children: [
                    Expanded(
                      child: TextField(

                        cursorColor: primaryColor,
                        controller: fromdateController,
                        onChanged: (string) {
                          if(string.length>=1){
                            //getRecordsByDate(string);
                          }
                          else{
                            getAllRecords();
                          }
                        },
                        onTap: () async {
                          DateTime? pickedDate = await showDatePicker(
                            context: context,
                            initialDate: DateTime.now(),
                            firstDate: DateTime(1950),
                            lastDate: DateTime.now(),
                            builder: (BuildContext context, Widget? child) {
                              return Theme(
                                data: ThemeData.dark().copyWith(
                                  colorScheme: ColorScheme.dark(
                                    primary: buttonColors,
                                    onPrimary: Colors.white,
                                    surface: buttonColors,
                                    onSurface: Colors.white,
                                  ),
                                  dialogBackgroundColor: primaryColor,
                                ),
                                child: child!,
                              );
                            },
                          );

                          if (pickedDate != null) {
                            print(pickedDate); //pickedDate output format => 2021-03-10 00:00:00.000
                            String formattedDate = DateFormat('dd-MM-yyyy').format(pickedDate);
                            print(formattedDate); //formatted date output using intl package =>  2021-03-16
                            setState(() {
                              fromDate=pickedDate;
                              fromdateController.text = formattedDate; //set output date to TextField value.
                            });
                            getRecordsByDateRange(fromdateController.text,todateController.text);
                          } else {}
                        },
                        decoration:  InputDecoration(
                          prefixIcon: Icon(
                            Icons.calendar_month,
                            color: primaryColor,
                          ),
                          suffixIcon: fromdateController.text!=''?IconButton(
                            icon:  Icon(
                              Icons.clear,
                              color: Colors.red,
                            ),
                            onPressed: () {
                              setState(() {
                                fromdateController.text='';
                              });
                              getAllRecords();
                            },
                          ):IconButton(
                            icon:  Icon(
                              Icons.clear,
                              color: Colors.transparent,
                            ),
                            onPressed: () {
                            },
                          ),
                          border: OutlineInputBorder(
                            borderSide: BorderSide(color: primaryColor),
                            borderRadius: BorderRadius.circular(30),
                          ),
                          focusedBorder: OutlineInputBorder(
                            borderSide: BorderSide(color: primaryColor),
                            borderRadius: BorderRadius.circular(30),
                          ),
                          enabledBorder: OutlineInputBorder(
                            borderSide: BorderSide(color: primaryColor),
                            borderRadius: BorderRadius.circular(30),
                          ),
                          //labelText: 'Search by phone number',
                          hintText: 'From date',

                          labelStyle: TextStyle(
                            color: greyColor, //<-- SEE HERE
                          ),
                        ),
                      ),
                    ),
                    SizedBox(width: 5),
                    Expanded(
                      child: TextField(

                        cursorColor: primaryColor,
                        controller: todateController,
                        onChanged: (string) {
                          if(string.length>=1){
                            //getRecordsByDate(string);
                          }
                          else{
                            getAllRecords();
                          }
                        },
                        onTap: () async {
                          DateTime? pickedDate = await showDatePicker(
                            context: context,
                            initialDate: DateTime.now(),
                            firstDate: fromDate,
                            lastDate: DateTime.now(),
                            builder: (BuildContext context, Widget? child) {
                              return Theme(
                                data: ThemeData.dark().copyWith(
                                  colorScheme: ColorScheme.dark(
                                    primary: buttonColors,
                                    onPrimary: Colors.white,
                                    surface: buttonColors,
                                    onSurface: Colors.white,
                                  ),
                                  dialogBackgroundColor: primaryColor,
                                ),
                                child: child!,
                              );
                            },
                          );

                          if (pickedDate != null) {
                            print(
                                pickedDate); //pickedDate output format => 2021-03-10 00:00:00.000
                            String formattedDate =
                            DateFormat('dd-MM-yyyy').format(pickedDate);
                            print(
                                formattedDate); //formatted date output using intl package =>  2021-03-16
                            setState(() {
                              todateController.text = formattedDate; //set output date to TextField value.
                            });
                            getRecordsByDateRange(fromdateController.text,todateController.text);
                          } else {}
                        },
                        decoration:  InputDecoration(
                          prefixIcon: Icon(
                            Icons.calendar_month,
                            color: primaryColor,
                          ),
                          suffixIcon: todateController.text!=''?IconButton(
                            icon:  Icon(
                              Icons.clear,
                              color: Colors.red,
                            ),
                            onPressed: () {
                              setState(() {
                                todateController.text='';
                              });
                              getAllRecords();
                            },
                          ):IconButton(
                            icon:  Icon(
                              Icons.clear,
                              color: Colors.transparent,
                            ),
                            onPressed: () {
                            },
                          ),
                          border: OutlineInputBorder(
                            borderSide: BorderSide(color: primaryColor),
                            borderRadius: BorderRadius.circular(30),
                          ),
                          focusedBorder: OutlineInputBorder(
                            borderSide: BorderSide(color: primaryColor),
                            borderRadius: BorderRadius.circular(30),
                          ),
                          enabledBorder: OutlineInputBorder(
                            borderSide: BorderSide(color: primaryColor),
                            borderRadius: BorderRadius.circular(30),
                          ),
                          //labelText: 'Search by phone number',
                          hintText: 'To date',

                          labelStyle: TextStyle(
                            color: greyColor, //<-- SEE HERE
                          ),
                        ),
                      ),
                    ),
                    SizedBox(width: 5),

                  ],
                ),
              ),),
            /*Visibility(
              visible:searchBy.toString().toLowerCase()=='date' ,
              child: Container(
                  height: MediaQuery.of(context).size.height * .07,
                  padding:  EdgeInsets.all(5),
                  child: Center(child: TextField(

                    cursorColor: primaryColor,
                    controller: searchController,
                    onChanged: (string) {
                      if(string.length>=1){
                        getRecordsByDate(string);
                      }
                      else{
                        getAllRecords();
                      }
                    },
                    onTap: () async {
                      DateTime? pickedDate = await showDatePicker(
                        context: context,
                        initialDate: DateTime.now(),
                        firstDate: DateTime(1950),
                        lastDate: DateTime.now(),
                        builder: (BuildContext context, Widget? child) {
                          return Theme(
                            data: ThemeData.dark().copyWith(
                              colorScheme: ColorScheme.dark(
                                primary: buttonColors,
                                onPrimary: Colors.white,
                                surface: buttonColors,
                                onSurface: Colors.white,
                              ),
                              dialogBackgroundColor: primaryColor,
                            ),
                            child: child!,
                          );
                        },
                      );

                      if (pickedDate != null) {
                        print(
                            pickedDate); //pickedDate output format => 2021-03-10 00:00:00.000
                        String formattedDate =
                        DateFormat('dd-MM-yyyy').format(pickedDate);
                        print(
                            formattedDate); //formatted date output using intl package =>  2021-03-16
                        setState(() {
                          searchController.text = formattedDate; //set output date to TextField value.
                        });
                        getRecordsByDate(searchController.text);
                      } else {}
                    },
                    decoration:  InputDecoration(
                      prefixIcon: Icon(
                        Icons.search,
                        color: primaryColor,
                      ),
                      suffixIcon: searchController.text!=''?IconButton(
                        icon:  Icon(
                          Icons.clear,
                          color: Colors.red,
                        ),
                        onPressed: () {
                          setState(() {
                            searchController.text='';
                          });
                          getAllRecords();
                        },
                      ):IconButton(
                        icon:  Icon(
                          Icons.clear,
                          color: Colors.transparent,
                        ),
                        onPressed: () {
                        },
                      ),
                      border: OutlineInputBorder(
                        borderSide: BorderSide(color: primaryColor),
                        borderRadius: BorderRadius.circular(30),
                      ),
                      focusedBorder: OutlineInputBorder(
                        borderSide: BorderSide(color: primaryColor),
                        borderRadius: BorderRadius.circular(30),
                      ),
                      enabledBorder: OutlineInputBorder(
                        borderSide: BorderSide(color: primaryColor),
                        borderRadius: BorderRadius.circular(30),
                      ),
                      //labelText: 'Search by phone number',
                      hintText: 'Search by date',

                      labelStyle: TextStyle(
                        color: greyColor, //<-- SEE HERE
                      ),
                    ),
                  ),)
              ),


             ),*/
            Expanded(child: _filtereddata()),

          ]);


    }
    else{
      return  Center(
          child: Padding(
            padding: EdgeInsets.fromLTRB(0, 40, 0, 0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                SizedBox(height: MediaQuery.of(context).size.height * .25,),
                Text('Click below icon to add new Record'),
                SizedBox(
                  height: 20,
                ),
                CircleAvatar(
                  backgroundColor: primaryColor,
                  radius: 40,
                  child: IconButton(
                    iconSize: 40,
                    icon: const Icon(
                      Icons.add,
                      color: Colors.white,
                    ),
                    onPressed: () async {
                      Navigator.push(context, MaterialPageRoute(builder: (context) => AddReports(customerId:widget.customerId,patName: widget.patName,patAge: widget.patAge,patGender: widget.patGender,))).then((value) {
                        getAllRecords();
                      });
                    },
                  ),
                )
              ],
            ),
          )
      );
    }


  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppSettings.appBar('Records'),
      body: isReportsDataLoading?Center(
        child: CircularProgressIndicator(
          color: primaryColor,
          strokeWidth: 5.0,
        ),
      ): _allreports(),
      floatingActionButton: Visibility(
        visible:reportsListOriginal.length!=0,
        child: CircleAvatar(
          backgroundColor: buttonColors,
          radius: 40,
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              IconButton(
                iconSize: 40,
                icon: const Icon(
                  Icons.add,
                  color: Colors.black,
                ),
                onPressed: () async{
                  /*await Navigator.push(
                          context,
                          MaterialPageRoute(
                              builder: (context) => AddPrescription()),
                        );*/
                  Navigator.push(context, MaterialPageRoute(builder: (context) => AddReports(customerId:widget.customerId,patName: widget.patName,patAge: widget.patAge,patGender: widget.patGender,))).then((value) {
                    getAllRecords();
                  });
                  //showBoreAddingDialog();
                },
              ),
              /* Padding(
                      padding: EdgeInsets.fromLTRB(5, 0, 5, 5),
                      child: Text(
                        'Add Tanks ',
                        style: TextStyle(color: Colors.white),
                      ),
                    )*/
            ],
          ),
        ),
      ),
    );
  }
}
