import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'dart:math' as math;
import 'glassmorphism_card.dart';
import 'themed_text.dart';
import '../theme/app_colors.dart';
import '../l10n/app_localizations.dart';

/// 구독이 없을 때 표시되는 빈 화면 위젯
///
/// 애니메이션 효과와 함께 사용자에게 구독 추가를 유도합니다.
class EmptyStateWidget extends StatelessWidget {
  final AnimationController fadeController;
  final AnimationController rotateController;
  final AnimationController slideController;
  final VoidCallback onAddPressed;

  const EmptyStateWidget({
    Key? key,
    required this.fadeController,
    required this.rotateController,
    required this.slideController,
    required this.onAddPressed,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return FadeTransition(
      opacity: Tween<double>(begin: 0.0, end: 1.0).animate(
          CurvedAnimation(parent: fadeController, curve: Curves.easeIn)),
      child: Center(
        child: SlideTransition(
          position: Tween<Offset>(
            begin: const Offset(0, 0.2),
            end: Offset.zero,
          ).animate(CurvedAnimation(
              parent: slideController, curve: Curves.easeOutBack)),
          child: GlassmorphismCard(
            width: null,
            margin: const EdgeInsets.all(16),
            padding: const EdgeInsets.all(32),
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                AnimatedBuilder(
                  animation: rotateController,
                  builder: (context, child) {
                    return Transform.rotate(
                      angle: rotateController.value * 2 * math.pi,
                      child: Container(
                        padding: const EdgeInsets.all(24),
                        decoration: BoxDecoration(
                          gradient: const LinearGradient(
                            colors: AppColors.blueGradient,
                            begin: Alignment.topLeft,
                            end: Alignment.bottomRight,
                          ),
                          borderRadius: BorderRadius.circular(16),
                          boxShadow: [
                            BoxShadow(
                              color: AppColors.primaryColor.withValues(alpha: 0.3),
                              spreadRadius: 0,
                              blurRadius: 16,
                              offset: const Offset(0, 8),
                            ),
                          ],
                        ),
                        child: const Icon(
                          Icons.subscriptions_outlined,
                          size: 48,
                          color: AppColors.pureWhite,
                        ),
                      ),
                    );
                  },
                ),
                const SizedBox(height: 32),
                ThemedText(
                  AppLocalizations.of(context).noSubscriptions,
                  fontSize: 22,
                  fontWeight: FontWeight.w800,
                  letterSpacing: -0.5,
                ),
                const SizedBox(height: 8),
                ThemedText(
                  AppLocalizations.of(context).addSubscriptionNow,
                  fontSize: 16,
                  opacity: 0.7,
                ),
                const SizedBox(height: 32),
                MouseRegion(
                  onEnter: (_) => {},
                  onExit: (_) => {},
                  child: ElevatedButton(
                    style: ElevatedButton.styleFrom(
                      foregroundColor: Colors.white,
                      padding: const EdgeInsets.symmetric(
                        horizontal: 32,
                        vertical: 16,
                      ),
                      shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(16),
                      ),
                      elevation: 4,
                      backgroundColor: AppColors.primaryColor,
                    ),
                    onPressed: () {
                      HapticFeedback.mediumImpact();
                      onAddPressed();
                    },
                    child: Text(
                      AppLocalizations.of(context).addSubscription,
                      style: TextStyle(
                        fontSize: 16,
                        fontWeight: FontWeight.w600,
                        letterSpacing: 0.5,
                        color: AppColors.pureWhite,
                      ),
                    ),
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
