import 'dart:developer';

import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
import 'package:sfm_app/bloc/devices_manager_bloc.dart';
import 'package:sfm_app/feature/devices/device_model.dart';
import 'package:sfm_app/product/extention/context_extention.dart';
import 'package:sfm_app/product/services/language_services.dart';

import '../constant/app/app_constants.dart';

class SharedPieChart extends StatefulWidget {
  const SharedPieChart(
      {super.key,
      required this.deviceByState,
      required this.devicesManagerBloc});

  final Map<String, List<Device>> deviceByState;
  final DevicesManagerBloc devicesManagerBloc;

  @override
  State<SharedPieChart> createState() => _SharedPieChartState();
}

class _SharedPieChartState extends State<SharedPieChart> {
  int lastTouchedIndex = -1;
  @override
  Widget build(BuildContext context) {
    TextStyle titleStyle = const TextStyle(
      color: Colors.white,
      fontSize: 20,
      fontWeight: FontWeight.bold,
    );
    int offlineCount =
        widget.deviceByState[ApplicationConstants.OFFLINE_STATE]?.length ?? 0;
    int normalCount =
        widget.deviceByState[ApplicationConstants.NORMAL_STATE]?.length ?? 0;
    int warningCount =
        widget.deviceByState[ApplicationConstants.WARNING_STATE]?.length ?? 0;
    int inProgressCount =
        widget.deviceByState[ApplicationConstants.INPROGRESS_STATE]?.length ??
            0;
    int errorCount =
        widget.deviceByState[ApplicationConstants.ERROR_STATE]?.length ?? 0;
    return AspectRatio(
      aspectRatio: 1.5,
      child: Row(
        children: <Widget>[
          const SizedBox(
            height: 18,
          ),
          Expanded(
            child: AspectRatio(
              aspectRatio: 1,
              child: PieChart(
                PieChartData(
                  pieTouchData: PieTouchData(
                    touchCallback: (FlTouchEvent event, pieTouchResponse) {
                      if (!event.isInterestedForInteractions ||
                          pieTouchResponse == null ||
                          pieTouchResponse.touchedSection == null) {
                        return;
                      }
                      int newTouchedIndex =
                          pieTouchResponse.touchedSection!.touchedSectionIndex;
                      updateDevicesOnTapPieChart(newTouchedIndex);
                    },
                  ),
                  sections: [
                    PieChartSectionData(
                      color: Colors.grey,
                      value: offlineCount.toDouble(),
                      title: offlineCount.toString(),
                      radius: context.dynamicWidth(0.2),
                      titleStyle: titleStyle,
                    ),
                    PieChartSectionData(
                      color: Colors.green,
                      value: normalCount.toDouble(),
                      title: normalCount.toString(),
                      radius: context.dynamicWidth(0.2),
                      titleStyle: titleStyle,
                    ),
                    PieChartSectionData(
                      color: Colors.red,
                      value: warningCount.toDouble(),
                      title: warningCount.toString(),
                      radius: context.dynamicWidth(0.2),
                      titleStyle: titleStyle,
                    ),
                    PieChartSectionData(
                      color: Colors.yellow,
                      value: inProgressCount.toDouble(),
                      title: inProgressCount.toString(),
                      radius: context.dynamicWidth(0.2),
                      titleStyle: titleStyle,
                    ),
                    PieChartSectionData(
                      color: Colors.black, // Có thể thêm màu cho trạng thái lỗi
                      value: errorCount.toDouble(),
                      title: errorCount.toString(),
                      radius: context.dynamicWidth(0.2),
                      titleStyle: titleStyle,
                    ),
                  ],
                  centerSpaceRadius: context.dynamicWidth(0.05),
                  sectionsSpace: 2,
                ),
              ),
            ),
          ),
          Column(
            mainAxisAlignment: MainAxisAlignment.end,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              if (offlineCount != 0)
                Column(
                  children: [
                    Indicator(
                      color: Colors.grey,
                      text: appLocalization(context).inactive_devices_message,
                      isSquare: true,
                    ),
                    SizedBox(
                      height: context.lowValue,
                    ),
                  ],
                ),
              if (normalCount != 0)
                Column(
                  children: [
                    Indicator(
                      color: Colors.green,
                      text: appLocalization(context).active_devices_message,
                      isSquare: true,
                    ),
                    SizedBox(
                      height: context.lowValue,
                    ),
                  ],
                ),
              if (warningCount != 0)
                Column(
                  children: [
                    Indicator(
                      color: Colors.red,
                      text: appLocalization(context).warning_devices_message,
                      isSquare: true,
                    ),
                    SizedBox(
                      height: context.lowValue,
                    ),
                  ],
                ),
              if (inProgressCount != 0)
                Column(
                  children: [
                    Indicator(
                      color: Colors.yellow,
                      text: appLocalization(context).in_progress_message,
                      isSquare: true,
                    ),
                    SizedBox(
                      height: context.lowValue,
                    ),
                  ],
                ),
              if (errorCount != 0)
                Indicator(
                  color: Colors.black,
                  text: appLocalization(context).error_message_uppercase,
                  isSquare: true,
                ),
            ],
          ),
          const SizedBox(
            width: 10,
          ),
        ],
      ),
    );
  }

  void updateDevicesOnTapPieChart(int touchedIndex) {
    if (touchedIndex != lastTouchedIndex) {
      log("Update PieChart On Tap Function");
      lastTouchedIndex = touchedIndex;
      if (touchedIndex == 0) {
        widget.devicesManagerBloc.getDeviceByState(-1);
      } else if (touchedIndex == 1) {
        widget.devicesManagerBloc.getDeviceByState(0);
      } else if (touchedIndex == 2) {
        widget.devicesManagerBloc.getDeviceByState(1);
      } else if (touchedIndex == 3) {
        widget.devicesManagerBloc.getDeviceByState(2);
      } else {
        widget.devicesManagerBloc.getDeviceByState(-2);
      }
    } else {}
  }
}

class Indicator extends StatelessWidget {
  const Indicator({
    super.key,
    required this.color,
    required this.text,
    required this.isSquare,
    this.size = 16,
    this.textColor,
  });
  final Color color;
  final String text;
  final bool isSquare;
  final double size;
  final Color? textColor;

  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        Container(
          width: size,
          height: size,
          decoration: BoxDecoration(
            shape: isSquare ? BoxShape.rectangle : BoxShape.circle,
            color: color,
          ),
        ),
        SizedBox(
          width: context.lowValue,
        ),
        Text(
          text,
          style: TextStyle(
            fontSize: 16,
            fontWeight: FontWeight.bold,
            color: textColor,
          ),
        )
      ],
    );
  }
}
