import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:healthcare_user/common/settings.dart';
import 'package:healthcare_user/models/sugar_history_model.dart';
import 'package:flutter_slidable/flutter_slidable.dart';

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

  @override
  State<SugarHistory> createState() => _SugarHistoryState();
}

class _SugarHistoryState extends State<SugarHistory> {
  bool isLoading = false;
  List<SugarHistoryModel> sugarHistoryList = [];
  List<SugarHistoryModel> FilteredList = [];
  var dateItems = [
    'All',
    'last 7 days',
    'last one month',
    'last one year',
  ];
  var dateItemsVariable = 'All';

  Future<void> getSugarHistoryDetails(var selectedRange) async {
    isLoading = true;
    var response1 = await AppSettings.getSugarHistory();
    print(response1);
    setState(() {
      sugarHistoryList = ((jsonDecode(response1)) as List).map((dynamic model) {
        return SugarHistoryModel.fromJson(model);
      }).toList();

      var now = new DateTime.now();
      var now_1w = now.subtract(Duration(days: 7));
      var now_1m = new DateTime(now.year, now.month - 1, now.day);
      var now_1y = new DateTime(now.year - 1, now.month, now.day);

      if (selectedRange.toString().toUpperCase() == 'LAST 7 DAYS') {
        FilteredList = sugarHistoryList.where((product) {
          final date = product.dateForFilter;
          return now_1w.isBefore(date);
        }).toList();
      } else if (selectedRange.toString().toUpperCase() == 'LAST ONE MONTH') {
        FilteredList = sugarHistoryList.where((product) {
          final date = product.dateForFilter;
          return now_1m.isBefore(date);
        }).toList();
      } else if (selectedRange.toString().toUpperCase() == 'LAST ONE YEAR') {
        FilteredList = sugarHistoryList.where((product) {
          final date = product.dateForFilter;
          return now_1y.isBefore(date);
        }).toList();
      } else {
        FilteredList = sugarHistoryList;
      }

      isLoading = false;
    });
  }

  @override
  void initState() {
    getSugarHistoryDetails(dateItemsVariable);
    super.initState();
  }

  deleteSugarRecord(sugarInfoId) async {
    AppSettings.preLoaderDialog(context);
    bool status = await AppSettings.deleteSugarDetails(sugarInfoId);

    if (status) {
      Navigator.of(context, rootNavigator: true).pop();

      AppSettings.longSuccessToast("BP record deleted successfully");
      await getSugarHistoryDetails(dateItemsVariable);
    } else {
      Navigator.of(context, rootNavigator: true).pop();

      AppSettings.longFailedToast("BP record deletion failed");
    }
  }

  Widget renderzUi() {
    if (sugarHistoryList.length != 0) {
      return Column(crossAxisAlignment: CrossAxisAlignment.end, children: [
        Padding(
          padding: EdgeInsets.fromLTRB(10, 10, 10, 10),
          child: DropdownButtonFormField(
            // Initial Value
            value: dateItemsVariable,
            isExpanded: true,
            decoration: const InputDecoration(
              prefixIcon: Icon(
                Icons.calendar_month,
                color: primaryColor,
              ),
              border: OutlineInputBorder(
                  borderSide: BorderSide(color: primaryColor)),
              focusedBorder: OutlineInputBorder(
                borderSide: BorderSide(color: primaryColor),
              ),
              enabledBorder: OutlineInputBorder(
                borderSide: BorderSide(color: primaryColor),
              ),
              labelText: 'Select Date Range',
              labelStyle: TextStyle(
                color: greyColor, //<-- SEE HERE
              ),
            ),

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

            // Array list of items
            items: dateItems.map((String items) {
              return DropdownMenuItem(
                  value: items,
                  child: Text(
                    items,
                    style: TextStyle(
                      fontSize: 16,
                    ),
                    textAlign: TextAlign.center,
                  ));
            }).toList(),
            // After selecting the desired option,it will
            // change button value to selected value
            onChanged: (String? newValue) {
              setState(() {
                dateItemsVariable = newValue!;
              });
              getSugarHistoryDetails(dateItemsVariable);
            },
          ),
        ),
        Expanded(
            child: ListView.builder(
                padding: EdgeInsets.all(0),
                itemCount: FilteredList.length,
                itemBuilder: (BuildContext context, int index) {
                  return Slidable(
                      key: const ValueKey(0),
                      endActionPane: ActionPane(
                        // A motion is a widget used to control how the pane animates.
                        motion: ScrollMotion(),

                        dragDismissible: false,
                        // A pane can dismiss the Slidable.
                        dismissible: DismissiblePane(onDismissed: () {
                          deleteSugarRecord(FilteredList[index].sugarInfoId);
                        }),

                        // All actions are defined in the children parameter.
                        children: [
                          // A SlidableAction can have an icon and/or a label.
                          SlidableAction(
                            backgroundColor: Color(0xFFFE4A49),
                            foregroundColor: Colors.white,
                            icon: Icons.delete,
                            label: 'Delete',
                            onPressed: (BuildContext context) {
                              deleteSugarRecord(FilteredList[index].sugarInfoId);
                            },
                          ),
                        ],
                      ),
                      child: Card(
                        color: Colors.white,
                        child: Padding(
                          padding: EdgeInsets.all(8),
                          child:
                          Row(
                            mainAxisAlignment: MainAxisAlignment.start,
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [

                              Column(
                                mainAxisAlignment: MainAxisAlignment.start,
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: [
                                  Text(
                                    'Fasting Sugar Value',
                                    style: labelTextStyle(),
                                  ),
                                  SizedBox(height:MediaQuery.of(context).size.height * .01,),
                                  Text(
                                    'PostPrandial Sugar Value',
                                    style: labelTextStyle(),
                                  ),
                                  SizedBox(height:MediaQuery.of(context).size.height * .01,),
                                  Text(
                                    'Actual Sugar Value',
                                    style: labelTextStyle(),
                                  ),
                                  SizedBox(height:MediaQuery.of(context).size.height * .01,),
                                  Text(
                                    'Sugar Status',
                                    style: labelTextStyle(),
                                  ),
                                  SizedBox(height:MediaQuery.of(context).size.height * .01,),
                                  Text(
                                    'Date',
                                    style: labelTextStyle(),
                                  ),
                                ],
                              ),
                              SizedBox(width:MediaQuery.of(context).size.width * .01,),
                              Column(
                                mainAxisAlignment: MainAxisAlignment.start,
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: [
                                  Text(
                                    ':',
                                    style: labelTextStyle(),
                                  ),
                                  SizedBox(height:MediaQuery.of(context).size.height * .01,),
                                  Text(
                                    ':',
                                    style: labelTextStyle(),
                                  ),
                                  SizedBox(height:MediaQuery.of(context).size.height * .01,),
                                  Text(
                                    ':',
                                    style: labelTextStyle(),
                                  ),
                                  SizedBox(height:MediaQuery.of(context).size.height * .01,),
                                  Text(
                                    ':',
                                    style: labelTextStyle(),
                                  ),
                                  SizedBox(height:MediaQuery.of(context).size.height * .01,),
                                  Text(
                                    ':',
                                    style: labelTextStyle(),
                                  ),
                                ],
                              ),
                              SizedBox(width:MediaQuery.of(context).size.width * .01,),
                              Expanded(child: Column(
                                mainAxisAlignment: MainAxisAlignment.start,
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: [
                                  Text(
                                      FilteredList[index]
                                          .fasting
                                          .toString()
                                          .toUpperCase(),
                                      style: valuesTextStyle()),
                                  SizedBox(height:MediaQuery.of(context).size.height * .01,),
                                  Text(
                                      FilteredList[index]
                                          .postPrandial
                                          .toString()
                                          .toUpperCase(),
                                      style: valuesTextStyle()),
                                  SizedBox(height:MediaQuery.of(context).size.height * .01,),
                                  Text(
                                      FilteredList[index]
                                          .sugarValue
                                          .toString()
                                          .toUpperCase(),
                                      style: valuesTextStyle()),
                                  SizedBox(height:MediaQuery.of(context).size.height * .01,),
                                  Text(
                                      FilteredList[index]
                                          .sugartText
                                          .toString()
                                          .toUpperCase(),
                                      style: wrapTextStyleBlack()),
                                  SizedBox(height:MediaQuery.of(context).size.height * .01,),
                                  Text(
                                      FilteredList[index]
                                          .actualDate
                                          .toString()
                                          .toUpperCase(),
                                      style: valuesTextStyle()),
                                ],
                              ),)


                              /*Column(
                                mainAxisAlignment: MainAxisAlignment.start,
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: [
                                  Row(
                                    mainAxisAlignment: MainAxisAlignment.start,
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: [
                                      *//*Image(
                                          image: const AssetImage(
                                              'images/height.png'),
                                          height: 25,
                                          width: 25,
                                          fit: BoxFit.fill),*//*
                                      Text(
                                        'Fasting Sugar Value',
                                        style: TextStyle(color: primaryColor),
                                      ),
                                      Padding(
                                        padding: EdgeInsets.all(5),
                                        child: Text(
                                            FilteredList[index]
                                                .fasting
                                                .toString()
                                                .toUpperCase(),
                                            style: valuesTextStyle()),
                                      )
                                    ],
                                  ),
                                  Row(
                                    mainAxisAlignment: MainAxisAlignment.start,
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: [
                                      Text(
                                        'PostPrandial Sugar Value',
                                        style: TextStyle(color: primaryColor),
                                      ),
                                      Padding(
                                        padding: EdgeInsets.all(5),
                                        child: Text(
                                            FilteredList[index]
                                                .postPrandial
                                                .toString()
                                                .toUpperCase(),
                                            style: valuesTextStyle()),
                                      )
                                    ],
                                  ),
                                  Row(
                                    mainAxisAlignment: MainAxisAlignment.start,
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: [
                                      Image(
                                          image: const AssetImage(
                                              'images/height.png'),
                                          height: 25,
                                          width: 25,
                                          fit: BoxFit.fill),
                                      Padding(
                                        padding: EdgeInsets.all(5),
                                        child: Text(
                                            FilteredList[index]
                                                .sugarValue
                                                .toString()
                                                .toUpperCase(),
                                            style: valuesTextStyle()),
                                      )
                                    ],
                                  ),
                                  Row(
                                    mainAxisAlignment: MainAxisAlignment.start,
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: [
                                      Image(
                                          image: const AssetImage(
                                              'images/height.png'),
                                          height: 25,
                                          width: 25,
                                          fit: BoxFit.fill),
                                      Padding(
                                        padding: EdgeInsets.all(5),
                                        child: Text(
                                            FilteredList[index]
                                                .sugartText
                                                .toString()
                                                .toUpperCase(),
                                            style: valuesTextStyle()),
                                      )
                                    ],
                                  ),
                                  Row(
                                    mainAxisAlignment: MainAxisAlignment.start,
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: [
                                      Image(
                                          image: const AssetImage(
                                              'images/date.png'),
                                          height: 25,
                                          width: 25,
                                          fit: BoxFit.fill),
                                      Padding(
                                        padding: EdgeInsets.all(5),
                                        child: Text(
                                            FilteredList[index]
                                                .actualDate
                                                .toString()
                                                .toUpperCase(),
                                            style: valuesTextStyle()),
                                      )
                                    ],
                                  ),
                                ],
                              ),*/
                            ],
                          ),
                        ),
                      ));
                })),
      ]);
    } 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('No data'),
            SizedBox(
              height: 20,
            ),
            CircleAvatar(
              backgroundColor: primaryColor,
              radius: 40,
              child: IconButton(
                iconSize: 40,
                icon: const Icon(
                  Icons.info,
                  color: Colors.white,
                ),
                onPressed: () async {},
              ),
            )
          ],
        ),
      ));
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppSettings.appBar('Diabetes'),
      body: isLoading
          ? Center(
              child: CircularProgressIndicator(
                color: primaryColor,
                strokeWidth: 5.0,
              ),
            )
          : renderzUi(),
    );
  }
}
