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

enum AppStateButtonStyle { filled, outline }

class AppStateCard extends StatelessWidget {
  const AppStateCard({
    super.key,
    required this.icon,
    required this.title,
    required this.subtitle,
    this.buttonLabel,
    this.onButtonPressed,
    this.buttonStyle = AppStateButtonStyle.outline,
  });

  final IconData icon;
  final String title;
  final String subtitle;
  final String? buttonLabel;
  final VoidCallback? onButtonPressed;
  final AppStateButtonStyle buttonStyle;

  @override
  Widget build(BuildContext context) {
    final cs = ShadTheme.of(context).colorScheme;
    final hasAction = buttonLabel != null && onButtonPressed != null;

    return ConstrainedBox(
      constraints: const BoxConstraints(maxWidth: 320),
      child: Column(
        mainAxisSize: MainAxisSize.min,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          Container(
            width: 104,
            height: 104,
            alignment: Alignment.center,
            decoration: BoxDecoration(
              color: cs.secondary,
              shape: BoxShape.circle,
            ),
            child: Icon(icon, size: 46, color: cs.mutedForeground),
          ),
          const SizedBox(height: 22),
          Text(
            title,
            textAlign: TextAlign.center,
            style: AppText.cardTitle.copyWith(
              fontSize: 22,
              fontWeight: FontWeight.w700,
              color: cs.foreground,
              height: 1.2,
            ),
          ),
          const SizedBox(height: 10),
          Text(
            subtitle,
            textAlign: TextAlign.center,
            style: AppText.body.copyWith(
              fontSize: 15,
              color: cs.mutedForeground,
              height: 1.5,
            ),
          ),
          if (hasAction) ...[
            const SizedBox(height: 20),
            SizedBox(
              height: 42,
              child: buttonStyle == AppStateButtonStyle.filled
                  ? FilledButton(
                      onPressed: onButtonPressed,
                      style: FilledButton.styleFrom(
                        backgroundColor: cs.foreground,
                        foregroundColor: cs.background,
                        elevation: 0,
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(12),
                        ),
                        padding: const EdgeInsets.symmetric(horizontal: 18),
                        textStyle: const TextStyle(
                          fontSize: 15,
                          fontWeight: FontWeight.w600,
                        ),
                      ),
                      child: Text(buttonLabel!),
                    )
                  : OutlinedButton(
                      onPressed: onButtonPressed,
                      style: OutlinedButton.styleFrom(
                        foregroundColor: cs.foreground,
                        side: BorderSide(color: cs.border),
                        backgroundColor: cs.background,
                        shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.circular(12),
                        ),
                        padding: const EdgeInsets.symmetric(horizontal: 18),
                        textStyle: const TextStyle(
                          fontSize: 15,
                          fontWeight: FontWeight.w600,
                        ),
                      ),
                      child: Text(buttonLabel!),
                    ),
            ),
          ],
        ],
      ),
    );
  }
}
