import 'package:diplomaticquarterapp/widgets/charts/app_time_series_chart.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';

import '../../../../Constants.dart';

class LineChartCurved extends StatelessWidget {
  final String title;
  final List<TimeSeriesSales2> timeSeries;
  final int indexes;
  final double horizontalInterval;

  LineChartCurved({this.title, this.timeSeries, this.indexes, this.horizontalInterval = 20.0});

  List<int> xAxixs = List();
  List<double> yAxixs = List();

  @override
  Widget build(BuildContext context) {
    getXaxix();
    getYaxix();
    return AspectRatio(
      aspectRatio: 1.0,
      child: Container(
        decoration: const BoxDecoration(
          borderRadius: BorderRadius.all(Radius.circular(18)),
          // color: Colors.white,
        ),
        child: Stack(
          children: <Widget>[
            Column(
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: <Widget>[
                const SizedBox(
                  height: 4,
                ),
                Text(
                  title,
                  style: TextStyle(color: Colors.black, fontSize: 16, letterSpacing: -0.64, fontWeight: FontWeight.w600),
                  textAlign: TextAlign.center,
                ),
                SizedBox(
                  height: 10,
                ),
                Expanded(
                  child: Padding(
                    padding: const EdgeInsets.only(right: 18.0, left: 16.0),
                    child: LineChart(
                      sampleData1(context),
                      swapAnimationDuration: const Duration(milliseconds: 250),
                    ),
                  ),
                ),
                const SizedBox(
                  height: 10,
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }

  getXaxix() {
    for (int index = 0; index < timeSeries.length; index++) {
      int mIndex = indexes * index;
      if (mIndex < timeSeries.length) {
        xAxixs.add(mIndex);
      }
    }
  }

  getYaxix() {
    int indexess = (timeSeries.length * 0.30).toInt();
    for (int index = 0; index < timeSeries.length; index++) {
      int mIndex = indexess * index;
      if (mIndex < timeSeries.length) {
        yAxixs.add(timeSeries[mIndex].sales);
      }
    }
  }

  // LineChartData sampleData1(context) {
  //   return LineChartData(
  //     lineTouchData: LineTouchData(
  //       touchTooltipData: LineTouchTooltipData(
  //         tooltipBgColor: Colors.white,
  //       ),
  //       touchCallback: (LineTouchResponse touchResponse) {},
  //       handleBuiltInTouches: true,
  //     ),
  //     gridData: FlGridData(show: true, drawVerticalLine: true, drawHorizontalLine: true, horizontalInterval: 14, verticalInterval: 14),
  //     titlesData: FlTitlesData(
  //       bottomTitles: SideTitles(
  //         showTitles: true,
  //         getTextStyles: (value) => const TextStyle(
  //           color: Colors.black,
  //           fontSize: 10,
  //         ),
  //         //   rotateAngle: 90,
  //         //rotateAngle:-65,
  //         margin: 22,
  //         getTitles: (value) {
  //           if (timeSeries.length < 15) {
  //             if (timeSeries.length > value.toInt()) {
  //               return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
  //             } else
  //               return '';
  //           } else {
  //             if (value.toInt() == 0) return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
  //             if (value.toInt() == timeSeries.length - 1) return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
  //             if (xAxixs.contains(value.toInt())) {
  //               return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
  //             }
  //           }
  //           return '';
  //         },
  //       ),
  //       leftTitles: SideTitles(
  //         showTitles: true,
  //         // interval:getMaxY() - getMinY() <=500?50:getMaxY() - getMinY() <=1000?100:200,
  //         interval: 3,
  //         getTextStyles: (value) => const TextStyle(
  //           color: Colors.black,
  //           fontWeight: FontWeight.bold,
  //           fontSize: 10,
  //         ),
  //
  //         margin: 12,
  //       ),
  //     ),
  //     borderData: FlBorderData(
  //       show: true,
  //       border: const Border(
  //         bottom: BorderSide(
  //           color: Colors.black,
  //           width: 0.5,
  //         ),
  //         left: BorderSide(
  //           color: Colors.black,
  //         ),
  //         right: BorderSide(
  //           color: Colors.black,
  //         ),
  //         top: BorderSide(
  //           color: Colors.transparent,
  //         ),
  //       ),
  //     ),
  //     minX: 0,
  //     maxX: (timeSeries.length - 1).toDouble(),
  //     maxY: getMaxY() + 0.3,
  //     minY: 0,
  //     //getMinY(),
  //     lineBarsData: getData(context),
  //   );
  // }

  LineChartData sampleData1(context) {
    return LineChartData(
      lineTouchData: LineTouchData(
        touchTooltipData: LineTouchTooltipData(
          tooltipBgColor: Colors.white,
        ),
        touchCallback: (touchEvent, LineTouchResponse touchResponse) {},
        handleBuiltInTouches: true,
      ),
      gridData: FlGridData(show: true, drawVerticalLine: true, drawHorizontalLine: true, horizontalInterval: 14, verticalInterval: 14),
      titlesData: FlTitlesData(
        bottomTitles: SideTitles(
          showTitles: true,
          getTextStyles: (cxt, value) => const TextStyle(
            color: Colors.black,
            fontSize: 10,
          ),
          rotateAngle: -65,
          margin: 22,
          getTitles: (value) {
            if (timeSeries.length < 15) {
              if (timeSeries.length > value.toInt()) {
                return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
              } else
                return '';
            } else {
              if (value.toInt() == 0) return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
              if (value.toInt() == timeSeries.length - 1) return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
              if (xAxixs.contains(value.toInt())) {
                return '${timeSeries[value.toInt()].time.month}/ ${timeSeries[value.toInt()].time.year}';
              }
            }
            return '';
          },
        ),
        leftTitles: SideTitles(
          showTitles: true,
          getTextStyles: (cxt, value) => const TextStyle(
            color: Colors.black,
            fontWeight: FontWeight.bold,
            fontSize: 10,
          ),
          interval: 3.0,
          // interval: getMaxY() - getMinY() <= 500
          //     ? getMaxY() - getMinY() <= 50
          //         ? 10
          //         : 10
          //     : getMaxY() - getMinY() <= 1000
          //         ? 100
          //         : getMaxY() - getMinY() >= 10000
          //             ? 5000
          //             : 200,
          margin: 12,
        ),
      ),
      borderData: FlBorderData(
        show: true,
        border: const Border(
          bottom: BorderSide(
            color: Colors.black,
            width: 0.5,
          ),
          left: BorderSide(
            color: Colors.black,
          ),
          right: BorderSide(
            color: Colors.black,
          ),
          top: BorderSide(
            color: Colors.transparent,
          ),
        ),
      ),
          minX: 0,
          maxX: (timeSeries.length - 1).toDouble(),
          maxY: getMaxY() + 0.3,
          minY: 0,
          //getMinY(),
      lineBarsData: getData(context),
    );
  }
  double getMaxY() {
    double max = 0;
    timeSeries.forEach((element) {
      double resultValueDouble = element.sales;
      if (resultValueDouble > max) max = resultValueDouble;
    });

    return max.roundToDouble();
  }

  double getMinY() {
    double min = timeSeries.isEmpty ? 0 : timeSeries.first.sales;
    timeSeries.forEach((element) {
      double resultValueDouble = element.sales;
      if (resultValueDouble < min) min = resultValueDouble;
    });
    int value = min.toInt();

    return value.toDouble();
  }

  List<LineChartBarData> getData(context) {
    List<FlSpot> spots = List();
    for (int index = 0; index < timeSeries.length; index++) {
      spots.add(FlSpot(index.toDouble(), timeSeries[index].sales));
    }

    final LineChartBarData lineChartBarData1 = LineChartBarData(
      spots: spots,
      isCurved: true,
      colors: [secondaryColor],
      barWidth: 1.5,
      isStrokeCapRound: true,
      dotData: FlDotData(
        show: false,
      ),
      belowBarData: BarAreaData(
        show: false,
      ),
    );

    return [
      lineChartBarData1,
    ];
  }
}
