import 'package:flutter/material.dart';
import '../constants/app_colors.dart';
import '../constants/app_typography.dart';

/// 빈 상태 위젯
///
/// 데이터가 없을 때 표시하는 공통 위젯
class EmptyStateWidget extends StatelessWidget {
  /// 제목
  final String title;

  /// 설명 메시지 (선택사항)
  final String? message;

  /// 아이콘 (선택사항)
  final IconData? icon;

  /// 아이콘 크기
  final double iconSize;

  /// 액션 버튼 텍스트 (선택사항)
  final String? actionText;

  /// 액션 버튼 콜백 (선택사항)
  final VoidCallback? onAction;

  /// 커스텀 위젯 (아이콘 대신 사용할 수 있음)
  final Widget? customWidget;

  const EmptyStateWidget({
    super.key,
    required this.title,
    this.message,
    this.icon,
    this.iconSize = 80.0,
    this.actionText,
    this.onAction,
    this.customWidget,
  });

  @override
  Widget build(BuildContext context) {
    final isDark = Theme.of(context).brightness == Brightness.dark;

    return Center(
      child: Padding(
        padding: const EdgeInsets.all(32.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          mainAxisSize: MainAxisSize.min,
          children: [
            // 아이콘 또는 커스텀 위젯
            if (customWidget != null)
              customWidget!
            else if (icon != null)
              Container(
                padding: const EdgeInsets.all(24),
                decoration: BoxDecoration(
                  color:
                      (isDark ? AppColors.darkPrimary : AppColors.lightPrimary)
                          .withValues(alpha: 0.1),
                  shape: BoxShape.circle,
                ),
                child: Icon(
                  icon,
                  size: iconSize,
                  color: isDark
                      ? AppColors.darkTextSecondary
                      : AppColors.lightTextSecondary,
                ),
              ),
            const SizedBox(height: 24),

            // 제목
            Text(
              title,
              style: AppTypography.heading2(isDark),
              textAlign: TextAlign.center,
            ),

            // 설명 메시지 (있을 경우)
            if (message != null) ...[
              const SizedBox(height: 12),
              Text(
                message!,
                style: AppTypography.body2(isDark),
                textAlign: TextAlign.center,
                maxLines: 3,
                overflow: TextOverflow.ellipsis,
              ),
            ],

            // 액션 버튼 (있을 경우)
            if (actionText != null && onAction != null) ...[
              const SizedBox(height: 32),
              ElevatedButton(
                onPressed: onAction,
                style: ElevatedButton.styleFrom(
                  backgroundColor: isDark
                      ? AppColors.darkPrimary
                      : AppColors.lightPrimary,
                  foregroundColor: Colors.white,
                  padding: const EdgeInsets.symmetric(
                    horizontal: 32,
                    vertical: 12,
                  ),
                  shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(8),
                  ),
                ),
                child: Text(
                  actionText!,
                  style: const TextStyle(
                    fontSize: 16,
                    fontWeight: FontWeight.w600,
                  ),
                ),
              ),
            ],
          ],
        ),
      ),
    );
  }
}

/// 리스트 빈 상태 위젯
///
/// 리스트나 그리드가 비어있을 때 사용하는 특화된 위젯
class ListEmptyStateWidget extends StatelessWidget {
  /// 아이템 유형 (예: "식당", "기록" 등)
  final String itemType;

  /// 추가 액션 콜백 (선택사항)
  final VoidCallback? onAdd;

  const ListEmptyStateWidget({super.key, required this.itemType, this.onAdd});

  @override
  Widget build(BuildContext context) {
    return EmptyStateWidget(
      icon: Icons.inbox_outlined,
      title: '$itemType이(가) 없습니다',
      message: '새로운 $itemType을(를) 추가해보세요',
      actionText: onAdd != null ? '$itemType 추가' : null,
      onAction: onAdd,
    );
  }
}
