import 'package:flutter/material.dart';
import 'package:rasadyar_core/core.dart';

class ROutlinedElevatedIcon extends StatefulWidget {
  ROutlinedElevatedIcon({
    super.key,
    required this.text,
    required this.onPressed,
    this.foregroundColor,
    this.backgroundColor,
    this.borderColor,
    this.disabledBackgroundColor,
    this.pressedBackgroundColor,
    this.radius,
    this.textStyle,
    this.icon,
    this.width = 150.0,
    this.height = 56.0,
  });

  final String text;
  final VoidCallback? onPressed;
  final double width;
  final double height;
  Color? foregroundColor;
  Color? backgroundColor;
  Color? borderColor;
  Color? disabledBackgroundColor;
  Color? pressedBackgroundColor;
  double? radius;
  TextStyle? textStyle;
  Widget? icon;

  @override
  State<ROutlinedElevatedIcon> createState() => _ROutlinedElevatedIconState();
}

class _ROutlinedElevatedIconState extends State<ROutlinedElevatedIcon> {
  @override
  Widget build(BuildContext context) {
    return OutlinedButton.icon(
      icon: widget.icon,
      label: Text(widget.text),
      onPressed: widget.onPressed,
      style: ButtonStyle(
        side: WidgetStateProperty.resolveWith<BorderSide?>((states) {
          if (states.contains(WidgetState.pressed)) {
            return BorderSide(
              color: widget.borderColor ?? AppColor.blueNormal,
              width: 2,
            );
          } else if (states.contains(WidgetState.disabled)) {
            return BorderSide(
              color: widget.borderColor ?? AppColor.blueNormal.withAlpha(38),
              width: 2,
            );
          }
          return BorderSide(
            color: widget.borderColor ?? AppColor.blueNormal,
            width: 2,
          );
        }),
        iconColor: WidgetStateProperty.resolveWith<Color?>((states) {
          if (states.contains(WidgetState.pressed)) {
            return Colors.white;
          } else if (states.contains(WidgetState.disabled)) {
            return widget.foregroundColor?.disabledColor ??
                AppColor.blueNormal.withAlpha(38);
          } else if (states.contains(WidgetState.hovered)) {
            return widget.foregroundColor?.hoverColor ??
                AppColor.blueNormal.withAlpha(50);
          }
          return widget.foregroundColor ?? AppColor.blueNormal;
        }),
        backgroundColor: WidgetStateProperty.resolveWith<Color?>((states) {
          if (states.contains(WidgetState.pressed)) {
            if (widget.pressedBackgroundColor != null) {
              return widget.pressedBackgroundColor;
            }
            return widget.backgroundColor?.pressedColor ?? AppColor.blueNormal;
          } else if (states.contains(WidgetState.hovered)) {
            return widget.backgroundColor?.hoverColor ??
                AppColor.blueNormal.hoverColor;
          } else if (states.contains(WidgetState.disabled)) {
            return widget.backgroundColor?.disabledColor ?? Colors.transparent;
          }
          return widget.backgroundColor;
        }),
        foregroundColor: WidgetStateProperty.resolveWith<Color?>((states) {
          if (states.contains(WidgetState.pressed)) {
            return Colors.white;
          } else if (states.contains(WidgetState.disabled)) {
            return widget.foregroundColor?.disabledColor ??
                AppColor.blueNormal.withAlpha(38);
          } else if (states.contains(WidgetState.hovered)) {
            return widget.foregroundColor?.hoverColor ??
                AppColor.blueNormal.withAlpha(50);
          }
          return widget.foregroundColor ?? AppColor.blueNormal;
        }),
        shape: WidgetStatePropertyAll(
          RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(widget.radius ?? 8),
          ),
        ),
        fixedSize: WidgetStatePropertyAll(Size(widget.width, widget.height)),
        padding: WidgetStatePropertyAll(EdgeInsets.zero),
        textStyle: WidgetStatePropertyAll(
          widget.textStyle ??
              AppFonts.yekan24.copyWith(color: AppColor.blueNormal),
        ),
      ),
    );
  }
}

Color? _getIconColor(BuildContext context) {
  var ss =WidgetStateProperty.resolveWith<Color?>((states) {
    if (states.contains(WidgetState.pressed)) {
      return Colors.white;
    } else if (states.contains(WidgetState.disabled)) {
      return Colors.grey.withAlpha(38);
    } else if (states.contains(WidgetState.hovered)) {
      return Colors.blue.withAlpha(50);
    }
    return Colors.blue;
  }).resolve({});
  return ss;
}
