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

import 'package:twister/config/colors.dart';
import 'package:twister/models/move.dart';
import 'package:twister/models/twister_color.dart';
import 'package:twister/models/twister_member.dart';
import 'package:twister/utils/color_extensions.dart';

class ShowMove extends StatelessWidget {
  const ShowMove({super.key, required this.move});

  final Move move;

  Color getColor(Move move) {
    switch (move.color?.value) {
      case TwisterAllowedColors.blue:
        return TwisterColors.blue;
      case TwisterAllowedColors.green:
        return TwisterColors.green;
      case TwisterAllowedColors.red:
        return TwisterColors.red;
      case TwisterAllowedColors.yellow:
        return TwisterColors.yellow;
      default:
        return TwisterColors.grey;
    }
  }

  Widget getImageWidget(Move move) {
    String imageAsset = 'assets/images/${move.member?.toString() ?? 'blank'}.png';

    return Image.asset(imageAsset);
  }

  Widget getTextWidget(Move move) {
    TextStyle style = const TextStyle(
      color: Colors.black,
      fontSize: 30,
      fontWeight: FontWeight.bold,
    );

    switch (move.member?.value) {
      case TwisterAllowedMembers.leftHand:
        return Text(tr('left_hand'), style: style);
      case TwisterAllowedMembers.rightHand:
        return Text(tr('right_hand'), style: style);
      case TwisterAllowedMembers.leftFoot:
        return Text(tr('left_foot'), style: style);
      case TwisterAllowedMembers.rightFoot:
        return Text(tr('right_foot'), style: style);
      default:
        return Text('?', style: style);
    }
  }

  Widget buildWidget(Move move, double maxWidth) {
    Color color = getColor(move);

    double containerSize = maxWidth * 0.8;

    return AnimatedSwitcher(
      duration: const Duration(milliseconds: 200),
      transitionBuilder: (Widget child, Animation<double> animation) {
        return ScaleTransition(scale: animation, child: child);
      },
      child: Container(
        width: containerSize,
        height: containerSize,
        decoration: BoxDecoration(
          color: color,
          borderRadius: BorderRadius.all(Radius.circular(containerSize)),
          border: Border.all(
            color: color.darken(15),
            width: 15,
          ),
        ),
        child: getImageWidget(move),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (context, constraints) {
        final double maxWidth = constraints.maxWidth;
        return buildWidget(move, maxWidth);
      },
    );
  }
}