import 'package:flutter/material.dart';

/// PrimeVue 스타일의 뱃지 위젯
///
/// [label] - 뱃지에 표시할 텍스트
/// [color] - 뱃지의 배경색
/// [icon] - 뱃지 앞에 표시할 아이콘 (선택사항)
/// [severity] - 미리 정의된 색상 스타일 (info, success, warning, danger)
/// [size] - 뱃지 크기 (small, normal, large)
/// [outlined] - 외곽선 스타일 적용 여부
/// [rounded] - 둥근 모서리 적용 여부
class PrimeBadge extends StatelessWidget {
  final String label;
  final Color? color;
  final IconData? icon;
  final String? severity;
  final String size;
  final bool outlined;
  final bool rounded;

  const PrimeBadge({
    super.key,
    required this.label,
    this.color,
    this.icon,
    this.severity,
    this.size = 'normal',
    this.outlined = false,
    this.rounded = true,
  });

  @override
  Widget build(BuildContext context) {
    // 색상 결정 (severity 또는 직접 지정된 색상)
    Color backgroundColor = _getBackgroundColor();
    Color textColor = _getTextColor(backgroundColor);

    // 크기에 따른 패딩 및 폰트 크기 설정
    EdgeInsets padding = _getPadding();
    double fontSize = _getFontSize();
    double iconSize = _getIconSize();

    // 테두리 반경 설정
    double borderRadius = rounded ? 16.0 : 4.0;

    return Container(
      padding: padding,
      decoration: BoxDecoration(
        color: outlined ? Colors.transparent : backgroundColor,
        border: outlined ? Border.all(color: backgroundColor) : null,
        borderRadius: BorderRadius.circular(borderRadius),
      ),
      child: Row(
        mainAxisSize: MainAxisSize.min,
        children: [
          if (icon != null) ...[
            Icon(
              icon,
              size: iconSize,
              color: outlined ? backgroundColor : textColor,
            ),
            SizedBox(width: 4),
          ],
          Text(
            label,
            style: TextStyle(
              color: outlined ? backgroundColor : textColor,
              fontWeight: FontWeight.bold,
              fontSize: fontSize,
            ),
          ),
        ],
      ),
    );
  }

  Color _getBackgroundColor() {
    if (color != null) {
      return color!;
    }

    switch (severity) {
      case 'info':
        return Colors.blue;
      case 'success':
        return Colors.green;
      case 'warning':
        return Colors.orange;
      case 'danger':
        return Colors.red;
      default:
        return Colors.blue;
    }
  }

  Color _getTextColor(Color backgroundColor) {
    // 배경색의 밝기에 따라 텍스트 색상 결정 (밝은 배경 -> 어두운 텍스트, 어두운 배경 -> 밝은 텍스트)
    final brightness = ThemeData.estimateBrightnessForColor(backgroundColor);
    return brightness == Brightness.dark ? Colors.white : Colors.black87;
  }

  EdgeInsets _getPadding() {
    switch (size) {
      case 'small':
        return const EdgeInsets.symmetric(horizontal: 8, vertical: 2);
      case 'large':
        return const EdgeInsets.symmetric(horizontal: 16, vertical: 8);
      case 'normal':
      default:
        return const EdgeInsets.symmetric(horizontal: 12, vertical: 6);
    }
  }

  double _getFontSize() {
    switch (size) {
      case 'small':
        return 10.0;
      case 'large':
        return 16.0;
      case 'normal':
      default:
        return 12.0;
    }
  }

  double _getIconSize() {
    switch (size) {
      case 'small':
        return 12.0;
      case 'large':
        return 20.0;
      case 'normal':
      default:
        return 16.0;
    }
  }
}
