import 'package:flutter/material.dart';
import 'package:fl_chart/fl_chart.dart';

import '../../../config/app_colors.dart';
import '../../../models/discoveries.dart';
import '../../../utils/color_extensions.dart';
import '../../../ui/widgets/charts/custom_bar_chart.dart';

class ChartDiscoveries extends CustomBarChart {
  final DiscoveriesData chartData;

  ChartDiscoveries({super.key, required this.chartData});

  final double chartHeight = 120.0;
  final double verticalTicksInterval = 10;

  @override
  Widget build(BuildContext context) {
    return Container(
      height: this.chartHeight,
      child: LayoutBuilder(builder: (context, constraints) {
        return getBarChart(
          barWidth: this.getBarWidth(constraints.maxWidth, this.chartData.data.keys.length),
          backgroundColor: Theme.of(context).colorScheme.onSurface,
        );
      }),
    );
  }

  double getMaxCountsValue() {
    double maxValue = 0;

    this.chartData.data.keys.forEach((key) {
      DiscoveriesDataValue? value = this.chartData.data[key];
      if (value != null) {
        double newArtistsCount = value.newArtistsCount.toDouble();
        double newTracksCount = value.newTracksCount.toDouble();

        if (newArtistsCount > maxValue) {
          maxValue = newArtistsCount;
        }
        if (newTracksCount > maxValue) {
          maxValue = newTracksCount;
        }
      }
    });

    return maxValue;
  }

  List<BarChartGroupData> getDataCounts(double barWidth) {
    List<BarChartGroupData> data = [];

    final newArtistsBarColor = AppColors.contentColorGreen.darken(20);
    final newTracksBarColor = AppColors.contentColorBlue.darken(20);

    this.chartData.data.keys.forEach((key) {
      DiscoveriesDataValue? value = this.chartData.data[key];
      if (value != null) {
        final int date = DateTime.parse(key).millisecondsSinceEpoch;

        data.add(this.getBarItem(
          x: date,
          values: [
            value.newArtistsCount.toDouble(),
            value.newTracksCount.toDouble(),
          ],
          barColors: [
            newArtistsBarColor,
            newTracksBarColor,
          ],
          barWidth: barWidth / 2.5,
        ));
      }
    });

    return data;
  }
}