import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:siro_driver/constant/colors.dart';
import 'package:siro_driver/constant/info.dart';
import 'package:siro_driver/constant/style.dart';
import 'package:siro_driver/views/widgets/my_scafold.dart';
import 'package:siro_driver/views/widgets/mycircular.dart';
import 'package:intl/intl.dart';
import '../../controller/home/captin/duration_controller .dart';

class RideCalculateDriver extends StatelessWidget {
  RideCalculateDriver({super.key});
  // DurationController durationController = Get.put(DurationController());

  @override
  Widget build(BuildContext context) {
    Get.put(DurationController());
    return MyScafolld(
        title: 'Ride Summaries'.tr,
        body: [
          GetBuilder<DurationController>(
            builder: (durationController) {
              if (durationController.isLoading) {
                return const Center(child: MyCircularProgressIndicator());
              }

              bool hasDurations = durationController.jsonData1.isNotEmpty &&
                  durationController.jsonData1['message'] != null &&
                  (durationController.jsonData1['message'] as List).isNotEmpty;

              bool hasRides = durationController.jsonData2.isNotEmpty &&
                  durationController.jsonData2['message'] != null &&
                  (durationController.jsonData2['message'] as List).isNotEmpty;

              bool hasStats = durationController.monthlyList.isNotEmpty;

              if (!hasDurations && !hasRides && !hasStats) {
                return Center(
                  child: Text('No data yet!'.tr),
                );
              }

              return ListView(
                children: [
                  if (hasDurations) ...[
                    Text(
                      '${'Average of Hours of'.tr} ${AppInformation.appName}${' is ON for this month'.tr}${' ${durationController.jsonData1['message'][0]['day'].toString().split('-')[1]}'.tr}',
                      style: AppStyle.title,
                      textAlign: TextAlign.center,
                    ),
                    Padding(
                      padding: const EdgeInsets.all(6),
                      child: Container(
                        decoration: AppStyle.boxDecoration1,
                        height: Get.height * .4,
                        child: LineChart(
                          duration: const Duration(milliseconds: 150),
                          curve: Curves.ease,
                          LineChartData(
                            lineBarsData: [
                              LineChartBarData(
                                isStepLineChart: true,
                                spots: durationController.chartData,
                                isCurved: true,
                                color: Colors.deepPurpleAccent,
                                barWidth: 3,
                                dotData: const FlDotData(show: true),
                                belowBarData: BarAreaData(
                                  show: true,
                                  color: AppColor.deepPurpleAccent,
                                ),
                                isStrokeJoinRound: true,
                                shadow: const BoxShadow(
                                  color: AppColor.yellowColor,
                                  blurRadius: 4,
                                  offset: Offset(2, 2),
                                ),
                              ),
                            ],
                            showingTooltipIndicators: const [],
                            titlesData: FlTitlesData(
                              show: true,
                              topTitles: AxisTitles(
                                axisNameWidget:
                                    Text('Days'.tr, style: AppStyle.title),
                                axisNameSize: 30,
                              ),
                              bottomTitles: AxisTitles(
                                  axisNameWidget: Text(
                                      'Total Hours on month'.tr,
                                      style: AppStyle.title),
                                  axisNameSize: 30,
                                  sideTitles: const SideTitles(
                                      reservedSize: 30, showTitles: true)),
                              leftTitles: AxisTitles(
                                  axisNameWidget: Text(
                                      'Counts of Hours on days'.tr,
                                      style: AppStyle.title),
                                  axisNameSize: 30,
                                  sideTitles: const SideTitles(
                                      reservedSize: 30, showTitles: true)),
                            ),
                            gridData: const FlGridData(show: true),
                            borderData: FlBorderData(
                              show: true,
                              border: const Border(
                                bottom: BorderSide(color: AppColor.accentColor),
                                left: BorderSide(color: AppColor.accentColor),
                              ),
                            ),
                          ),
                        ),
                      ),
                    ),
                  ],
                  if (hasRides) ...[
                    const SizedBox(height: 5),
                    Padding(
                      padding: const EdgeInsets.all(6),
                      child: Container(
                        decoration: AppStyle.boxDecoration1,
                        height: Get.height * .4,
                        child: LineChart(
                          duration: const Duration(milliseconds: 150),
                          curve: Curves.ease,
                          LineChartData(
                            lineBarsData: [
                              LineChartBarData(
                                spots: durationController.chartRideCount,
                                color: Colors.deepPurpleAccent,
                                barWidth: 3,
                                dotData: const FlDotData(show: true),
                                belowBarData: BarAreaData(
                                  show: true,
                                  color: AppColor.deepPurpleAccent,
                                ),
                                isStrokeJoinRound: true,
                                shadow: const BoxShadow(
                                  color: AppColor.yellowColor,
                                  blurRadius: 4,
                                  offset: Offset(2, 2),
                                ),
                              ),
                            ],
                            showingTooltipIndicators: const [],
                            titlesData: FlTitlesData(
                              show: true,
                              topTitles: AxisTitles(
                                axisNameWidget:
                                    Text('Days'.tr, style: AppStyle.title),
                                axisNameSize: 30,
                              ),
                              bottomTitles: AxisTitles(
                                  axisNameWidget: Text(
                                    '${"Total rides on month".tr} = ${durationController.jsonData2['message'][0]['totalCount'] ?? 0}'
                                        .tr,
                                    style: AppStyle.title,
                                  ),
                                  axisNameSize: 30,
                                  sideTitles: const SideTitles(
                                      reservedSize: 30, showTitles: true)),
                              leftTitles: AxisTitles(
                                  axisNameWidget: Text(
                                      'Counts of rides on days'.tr,
                                      style: AppStyle.title),
                                  axisNameSize: 30,
                                  sideTitles: const SideTitles(
                                      reservedSize: 30, showTitles: true)),
                            ),
                            gridData: const FlGridData(show: true),
                            borderData: FlBorderData(
                              show: true,
                              border: const Border(
                                bottom: BorderSide(color: AppColor.accentColor),
                                left: BorderSide(color: AppColor.accentColor),
                              ),
                            ),
                          ),
                        ),
                      ),
                    ),
                    const SizedBox(height: 5),
                    Padding(
                      padding: const EdgeInsets.all(6),
                      child: Container(
                        decoration: AppStyle.boxDecoration1,
                        height: Get.height * .4,
                        child: LineChart(
                          duration: const Duration(milliseconds: 150),
                          curve: Curves.ease,
                          LineChartData(
                            lineBarsData: [
                              LineChartBarData(
                                isStepLineChart: true,
                                spots: durationController.chartRidePriceDriver,
                                isCurved: true,
                                isStrokeCapRound: true,
                                preventCurveOverShooting: true,
                                color: Colors.deepPurpleAccent,
                                barWidth: 3,
                                dotData: const FlDotData(show: true),
                                belowBarData: BarAreaData(
                                  show: true,
                                  color: AppColor.deepPurpleAccent,
                                ),
                                isStrokeJoinRound: true,
                                shadow: const BoxShadow(
                                  color: AppColor.yellowColor,
                                  blurRadius: 4,
                                  offset: Offset(2, 2),
                                ),
                              ),
                            ],
                            showingTooltipIndicators: const [],
                            titlesData: FlTitlesData(
                              show: true,
                              topTitles: AxisTitles(
                                axisNameWidget:
                                    Text('Days'.tr, style: AppStyle.title),
                                axisNameSize: 30,
                              ),
                              bottomTitles: AxisTitles(
                                  axisNameWidget: Text(
                                    '${"Total budgets on month".tr} = ${durationController.jsonData2['message'][0]['totalPrice'] ?? 0}'
                                        .tr,
                                    style: AppStyle.title,
                                  ),
                                  axisNameSize: 30,
                                  sideTitles: const SideTitles(
                                      reservedSize: 30, showTitles: true)),
                              leftTitles: AxisTitles(
                                  axisNameWidget: Text(
                                      'Counts of budgets on days'.tr,
                                      style: AppStyle.title),
                                  axisNameSize: 30,
                                  sideTitles: const SideTitles(
                                      reservedSize: 30, showTitles: true)),
                            ),
                            gridData: const FlGridData(show: true),
                            borderData: FlBorderData(
                              show: true,
                              border: const Border(
                                bottom: BorderSide(color: AppColor.accentColor),
                                left: BorderSide(color: AppColor.accentColor),
                              ),
                            ),
                          ),
                        ),
                      ),
                    ),
                  ],
                  Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Container(
                          decoration: AppStyle.boxDecoration1,
                          child: !hasStats
                              ? SizedBox(
                                  height: Get.height * .2,
                                  child: Center(
                                    child: Text(
                                      "No statistics yet".tr,
                                      style: AppStyle.title,
                                    ),
                                  ),
                                )
                              : DriverStatsTable(
                                  monthlyList: durationController.monthlyList,
                                )))
                ],
              );
            },
          )
          // BarChartWidget(),
        ],
        isleading: true);
  }
}

class DriverStatsTable extends StatelessWidget {
  final List monthlyList;

  const DriverStatsTable({Key? key, required this.monthlyList})
      : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(10),
        color: Colors.white,
        boxShadow: [
          BoxShadow(
            color: Colors.grey.withOpacity(0.5),
            spreadRadius: 2,
            blurRadius: 5,
            offset: const Offset(0, 3),
          ),
        ],
      ),
      padding: const EdgeInsets.all(16),
      child: DataTable(
        columnSpacing: 12,
        columns: [
          DataColumn(label: Text('Statistic'.tr)),
          DataColumn(label: Text('Value'.tr)),
        ],
        rows: _buildRows(),
      ),
    );
  }

  List<DataRow> _buildRows() {
    return [
      DataRow(cells: [
        DataCell(Text(
          'Total Orders'.tr,
          style: AppStyle.title,
        )),
        DataCell(Text(
          monthlyList[0]['total_orders'].toString(),
          style: AppStyle.number,
        )),
      ]),
      DataRow(cells: [
        DataCell(Text(
          'Completed'.tr,
          style: AppStyle.title,
        )),
        DataCell(Text(
          monthlyList[0]['completed_orders'].toString(),
          style: AppStyle.number,
        )),
      ]),
      DataRow(cells: [
        DataCell(Text(
          'Canceled Orders'.tr,
          style: AppStyle.title,
        )),
        DataCell(Text(
          monthlyList[0]['canceled_orders'].toString(),
          style: AppStyle.number,
        )),
      ]),
      DataRow(cells: [
        DataCell(Text(
          'Rejected Orders'.tr,
          style: AppStyle.title,
        )),
        DataCell(Text(
          monthlyList[0]['rejected_orders'].toString(),
          style: AppStyle.number,
        )),
      ]),
      DataRow(cells: [
        DataCell(Text(
          'Percent Rejected'.tr,
          style: AppStyle.title,
        )),
        DataCell(Text(
          '${(monthlyList[0]['percent_rejected']).toString()}%',
          style: AppStyle.number.copyWith(
              color: double.parse(monthlyList[0]['percent_canceled']) < .3
                  ? AppColor.greenColor
                  : AppColor.redColor),
        )),
      ]),
      DataRow(cells: [
        DataCell(Text(
          'Percent Canceled'.tr,
          style: AppStyle.title,
        )),
        DataCell(Text(
          '${(monthlyList[0]['percent_canceled']).toString()}%',
          style: AppStyle.number.copyWith(
              color: double.parse(monthlyList[0]['percent_canceled']) < .3
                  ? AppColor.greenColor
                  : AppColor.redColor),
        )),
      ]),
      DataRow(cells: [
        DataCell(Text(
          'Percent Completed'.tr,
          style: AppStyle.title,
        )),
        DataCell(Text(
          '${(monthlyList[0]['percent_completed']).toString()}%',
          style: AppStyle.number.copyWith(
              color: double.parse(monthlyList[0]['percent_completed']) > .7
                  ? AppColor.greenColor
                  : AppColor.redColor),
        )),
      ]),
    ];
  }
}

class StaticDriverOrder extends StatelessWidget {
  const StaticDriverOrder({
    Key? key,
    required this.title,
    required this.jsonTitle,
  }) : super(key: key);

  final String title, jsonTitle;

  @override
  Widget build(BuildContext context) {
    return Container(
      margin: const EdgeInsets.all(8.0),
      padding: const EdgeInsets.all(16.0),
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(10.0),
        boxShadow: [
          BoxShadow(
            color: Colors.grey.withOpacity(0.3),
            spreadRadius: 3,
            blurRadius: 5,
            offset: const Offset(0, 3), // changes position of shadow
          ),
        ],
      ),
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text(
            title,
            style: const TextStyle(
              fontSize: 16,
              fontWeight: FontWeight.bold,
              color: Colors.black54,
            ),
          ),
          const SizedBox(height: 8.0),
          Text(
            jsonTitle,
            style: const TextStyle(
              fontSize: 18,
              fontWeight: FontWeight.bold,
              color: Colors.black,
            ),
          ),
        ],
      ),
    );
  }
}
