import 'package:refilc/theme/colors/colors.dart';
import 'package:refilc_plus/ui/mobile/goal_planner/goal_planner.dart';
import 'package:refilc_plus/ui/mobile/goal_planner/goal_planner_screen.i18n.dart';
import 'package:refilc_plus/ui/mobile/goal_planner/grade_display.dart';
import 'package:flutter/material.dart';

enum RouteMark { recommended, fastest }

class RouteOption extends StatelessWidget {
  const RouteOption(
      {super.key,
      required this.plan,
      this.mark,
      this.selected = false,
      required this.onSelected});

  final Plan plan;
  final RouteMark? mark;
  final bool selected;
  final void Function() onSelected;

  Widget markLabel({Color? colorOverride}) {
    TextStyle style =
        TextStyle(fontWeight: FontWeight.bold, color: colorOverride);

    switch (mark!) {
      case RouteMark.recommended:
        return Text("recommended".i18n, style: style);
      case RouteMark.fastest:
        return Text("fastest".i18n, style: style);
    }
  }

  Color markColor(BuildContext context) {
    switch (mark) {
      case RouteMark.recommended:
        return const Color.fromARGB(255, 104, 93, 255);
      case RouteMark.fastest:
        return const Color.fromARGB(255, 255, 91, 146);
      default:
        return Theme.of(context).colorScheme.primary;
    }
  }

  @override
  Widget build(BuildContext context) {
    List<Widget> gradeWidgets = [];

    for (int i = 5; i > 1; i--) {
      final count = plan.plan.where((e) => e == i).length;

      if (count > 4) {
        gradeWidgets.add(Row(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text(
              "${count}x",
              style: TextStyle(
                fontSize: 22.0,
                fontWeight: FontWeight.w500,
                color: AppColors.of(context).text.withOpacity(.7),
              ),
            ),
            const SizedBox(width: 4.0),
            GradeDisplay(grade: i),
          ],
        ));
      } else {
        gradeWidgets
            .addAll(List.generate(count, (_) => GradeDisplay(grade: i)));
      }

      if (count > 0) {
        gradeWidgets.add(SizedBox(
          height: 36.0,
          width: 32.0,
          child: Center(
              child: Icon(Icons.add,
                  color: AppColors.of(context).text.withOpacity(.5))),
        ));
      }
    }

    gradeWidgets.removeLast();

    return Padding(
      padding: const EdgeInsets.only(bottom: 12.0),
      child: SizedBox(
        width: double.infinity,
        child: Card(
          surfaceTintColor:
              selected ? markColor(context).withOpacity(.2) : Colors.white,
          margin: EdgeInsets.zero,
          elevation: 5,
          shadowColor: Colors.transparent,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(16.0),
            side: selected
                ? BorderSide(color: markColor(context), width: 1.5)
                : BorderSide.none,
          ),
          child: InkWell(
            borderRadius: BorderRadius.circular(16.0),
            onTap: onSelected,
            child: Padding(
              padding: const EdgeInsets.only(
                  top: 16.0, bottom: 16.0, left: 20.0, right: 12.0),
              child: Column(
                mainAxisSize: MainAxisSize.min,
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  if (mark != null) ...[
                    // Chip(
                    //   label: markLabel(),
                    //   visualDensity: VisualDensity.compact,
                    //   backgroundColor:
                    //       selected ? markColor(context) : Colors.transparent,
                    //   labelPadding: const EdgeInsets.symmetric(horizontal: 8.0),
                    //   labelStyle:
                    //       TextStyle(color: selected ? Colors.white : null),
                    //   shape: StadiumBorder(
                    //     side: BorderSide(
                    //       color: markColor(context),
                    //       width: 3.0,
                    //     ),
                    //   ),
                    // ),
                    markLabel(
                        colorOverride: selected ? markColor(context) : null),
                    const SizedBox(height: 6.0),
                  ],
                  Wrap(
                    spacing: 4.0,
                    runSpacing: 8.0,
                    children: gradeWidgets,
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

class RouteOptionRow extends StatelessWidget {
  const RouteOptionRow({
    super.key,
    required this.plan,
    this.mark,
  });

  final Plan plan;
  final RouteMark? mark;

  @override
  Widget build(BuildContext context) {
    List<Widget> gradeWidgets = [];

    for (int i = 5; i > 1; i--) {
      final count = plan.plan.where((e) => e == i).length;

      if (count > 4) {
        gradeWidgets.add(Row(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text(
              "${count}x",
              style: TextStyle(
                fontSize: 22.0,
                fontWeight: FontWeight.w500,
                color: AppColors.of(context).text.withOpacity(.7),
              ),
            ),
            const SizedBox(width: 4.0),
            GradeDisplay(grade: i),
          ],
        ));
      } else {
        gradeWidgets
            .addAll(List.generate(count, (_) => GradeDisplay(grade: i)));
      }

      if (count > 0) {
        gradeWidgets.add(SizedBox(
          height: 36.0,
          width: 32.0,
          child: Center(
              child: Icon(Icons.add,
                  color: AppColors.of(context).text.withOpacity(.5))),
        ));
      }
    }

    gradeWidgets.removeLast();

    return Wrap(
      spacing: 4.0,
      runSpacing: 8.0,
      children: gradeWidgets,
    );
  }
}
