import 'package:flutter/material.dart';
/// 自定义默认按钮（支持不可点击/禁用状态）
class CustomButton extends StatelessWidget {
  final String text; // 按钮文字
  final Color backgroundColor; // 按钮背景色
  final double borderRadius; // 圆角半径（默认5）
  final VoidCallback? onPressed; // 点击事件回调
  final EdgeInsetsGeometry? padding; // 内边距
  final EdgeInsetsGeometry? margin; // 外边距
  final double? height; // 按钮高度
  final TextStyle? textStyle; // 文字样式

  /// 新增：是否可点击（true 可点，false 禁用）
  /// 注意：如果 onPressed 为 null，也会被视为不可点击
  final bool enabled;

  /// 新增：禁用时的背景色（可选）
  final Color? disabledBackgroundColor;

  /// 新增：禁用时的文字颜色（可选）
  final Color? disabledTextColor;

  const CustomButton({
    super.key,
    required this.text,
    required this.backgroundColor,
    this.borderRadius = 5.0,
    this.onPressed,
    this.padding,
    this.margin,
    this.height,
    this.textStyle,
    this.enabled = true,
    this.disabledBackgroundColor,
    this.disabledTextColor,
  });

  @override
  Widget build(BuildContext context) {
    // 如果 enabled 为 false 或 onPressed 为 null，则视为不可点击
    final bool isEnabled = enabled && onPressed != null;

    // 计算展示用背景色与文字样式
    final Color bgColor = isEnabled
        ? backgroundColor
        : (disabledBackgroundColor ?? Colors.grey.shade400);

    TextStyle finalTextStyle;
    if (textStyle != null) {
      finalTextStyle = isEnabled
          ? textStyle!
          : textStyle!.copyWith(
        color: disabledTextColor ?? textStyle!.color?.withOpacity(0.8) ?? Colors.white70,
      );
    } else {
      finalTextStyle = TextStyle(
        color: isEnabled ? Colors.white : (disabledTextColor ?? Colors.white70),
        fontSize: 15,
        fontWeight: FontWeight.bold,
      );
    }

    // 点击拦截器 + 视觉反馈（禁用时降低不透明度）
    return Opacity(
      opacity: isEnabled ? 1.0 : 0.65,
      child: AbsorbPointer(
        absorbing: !isEnabled,
        child: GestureDetector(
          onTap: isEnabled ? onPressed : null,
          child: Container(
            height: height ?? 45, // 默认高度45
            padding: padding ?? const EdgeInsets.all(8), // 默认内边距
            margin: margin ?? const EdgeInsets.symmetric(horizontal: 5), // 默认外边距
            decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(borderRadius),
              color: bgColor,
            ),
            child: Center(
              child: Text(
                text,
                style: finalTextStyle,
              ),
            ),
          ),
        ),
      ),
    );
  }
}