import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

import 'package:puissance4/common/ui/parameters/parameter_painter.dart';

import 'package:puissance4/config/default_activity_settings.dart';
import 'package:puissance4/models/settings/settings_activity.dart';
import 'package:puissance4/models/settings/settings_global.dart';

class ParameterWidget extends StatelessWidget {
  const ParameterWidget({
    super.key,
    required this.code,
    required this.value,
    required this.isSelected,
    required this.size,
    required this.activitySettings,
    required this.globalSettings,
    required this.onPressed,
  });

  final String code;
  final String value;
  final bool isSelected;
  final double size;
  final ActivitySettings activitySettings;
  final GlobalSettings globalSettings;
  final VoidCallback onPressed;

  static const Color buttonColorActive = Colors.blue;
  static const Color buttonColorInactive = Colors.white;
  static const double buttonBorderWidth = 4.0;
  static const double buttonBorderRadius = 12.0;

  @override
  Widget build(BuildContext context) {
    Widget content = const SizedBox.shrink();

    switch (code) {
      case DefaultActivitySettings.parameterCodeGameMode:
        content = getGameModeParameterItem();
        break;
      case DefaultActivitySettings.parameterCodeSize:
        content = getSizeParameterItem(value);
        break;
      default:
        printlog('Unknown parameter: $code/$value');
        content = getUnknownParameterItem();
    }

    final Color buttonColor = isSelected ? buttonColorActive : buttonColorInactive;

    return Container(
      decoration: BoxDecoration(
        color: buttonColor,
        borderRadius: BorderRadius.circular(buttonBorderRadius),
        border: Border.all(
          color: buttonColor,
          width: buttonBorderWidth,
        ),
      ),
      child: content,
    );
  }

  // "unknown" parameter -> simple block with text
  Widget getUnknownParameterItem() {
    return StyledButton.text(
      caption: '$code / $value',
      color: Colors.grey,
      onPressed: null,
    );
  }

  Widget getGameModeParameterItem() {
    String text = '';
    Color baseColor = Colors.grey;

    switch (value) {
      case DefaultActivitySettings.gameModeHumanVsHuman:
        text = '🧑  🧑';
        baseColor = Colors.green;
        break;
      case DefaultActivitySettings.gameModeHumanVsRobot:
        text = '🧑  🤖';
        baseColor = Colors.pink;
        break;
      case DefaultActivitySettings.gameModeRobotVsHuman:
        text = '🤖  🧑';
        baseColor = Colors.pink;
        break;
      case DefaultActivitySettings.gameModeRobotVsRobot:
        text = '🤖  🤖';
        baseColor = Colors.brown;
        break;
      default:
    }

    return StyledButton.text(
      caption: text,
      color: baseColor,
      onPressed: onPressed,
    );
  }

  Widget getSizeParameterItem(final String value) {
    Color backgroundColor = Colors.grey;

    switch (value) {
      case DefaultActivitySettings.sizeValueMedium:
        backgroundColor = Colors.orange;
        break;
      default:
        printlog('Wrong value for boardSize parameter value: $value');
    }

    return StyledButton(
      color: backgroundColor,
      onPressed: onPressed,
      child: CustomPaint(
        size: Size(size, size),
        willChange: false,
        painter: ParameterPainter(
          code: code,
          value: value,
          activitySettings: activitySettings,
          globalSettings: globalSettings,
        ),
        isComplex: true,
      ),
    );
  }
}