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

/// 交易按钮组件 - 买入/卖出按钮
class TradeButton extends StatelessWidget {
  final bool isBuy;
  final String? coinCode;
  final VoidCallback? onPressed;
  final bool isLoading;
  final bool fullWidth;

  // 颜色常量
  static const buyColor = Color(0xFF00C853);
  static const sellColor = Color(0xFFFF5252);

  const TradeButton({
    super.key,
    this.isBuy = true,
    this.coinCode,
    this.onPressed,
    this.isLoading = false,
    this.fullWidth = false,
  });

  /// 买入按钮
  const TradeButton.buy({
    super.key,
    this.coinCode,
    this.onPressed,
    this.isLoading = false,
    this.fullWidth = false,
  }) : isBuy = true;

  /// 卖出按钮
  const TradeButton.sell({
    super.key,
    this.coinCode,
    this.onPressed,
    this.isLoading = false,
    this.fullWidth = false,
  }) : isBuy = false;

  @override
  Widget build(BuildContext context) {
    final color = isBuy ? buyColor : sellColor;
    final text = isBuy ? '买入${coinCode != null ? ' $coinCode' : ''}' : '卖出${coinCode != null ? ' $coinCode' : ''}';
    final icon = isBuy ? LucideIcons.arrowDownToLine : LucideIcons.arrowUpFromLine;

    final button = ShadButton(
      backgroundColor: color,
      onPressed: isLoading ? null : onPressed,
      child: Row(
        mainAxisSize: fullWidth ? MainAxisSize.max : MainAxisSize.min,
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          if (isLoading)
            const SizedBox.square(
              dimension: 16,
              child: CircularProgressIndicator(
                strokeWidth: 2,
                color: Colors.white,
              ),
            )
          else
            Icon(icon, size: 18, color: Colors.white),
          const SizedBox(width: 8),
          Text(
            text,
            style: const TextStyle(
              color: Colors.white,
              fontSize: 16,
              fontWeight: FontWeight.w600,
            ),
          ),
        ],
      ),
    );

    if (fullWidth) {
      return SizedBox(width: double.infinity, child: button);
    }
    return button;
  }
}

/// 交易按钮组 - 同时显示买入和卖出按钮
class TradeButtonGroup extends StatelessWidget {
  final String? coinCode;
  final VoidCallback? onBuyPressed;
  final VoidCallback? onSellPressed;
  final bool isBuyLoading;
  final bool isSellLoading;

  const TradeButtonGroup({
    super.key,
    this.coinCode,
    this.onBuyPressed,
    this.onSellPressed,
    this.isBuyLoading = false,
    this.isSellLoading = false,
  });

  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
        Expanded(
          child: TradeButton.buy(
            coinCode: coinCode,
            onPressed: onBuyPressed,
            isLoading: isBuyLoading,
          ),
        ),
        const SizedBox(width: 12),
        Expanded(
          child: TradeButton.sell(
            coinCode: coinCode,
            onPressed: onSellPressed,
            isLoading: isSellLoading,
          ),
        ),
      ],
    );
  }
}
