import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import '../providers/subscription_provider.dart';
import '../providers/locale_provider.dart';
import '../services/currency_util.dart';
import 'animated_wave_background.dart';
// Glass 제거: Material 3 Card 사용
import '../l10n/app_localizations.dart';

/// 메인 화면 상단에 표시되는 요약 카드 위젯
///
/// 총 구독 수와 월별 총 지출을 표시합니다.
class MainScreenSummaryCard extends StatelessWidget {
  final SubscriptionProvider provider;
  final AnimationController fadeController;
  final AnimationController pulseController;
  final AnimationController waveController;
  final AnimationController slideController;
  const MainScreenSummaryCard({
    super.key,
    required this.provider,
    required this.fadeController,
    required this.pulseController,
    required this.waveController,
    required this.slideController,
  });

  @override
  Widget build(BuildContext context) {
    // 언어 설정 가져오기
    final locale = context.watch<LocaleProvider>().locale.languageCode;
    final defaultCurrency = CurrencyUtil.getDefaultCurrency(locale);
    final currencySymbol = CurrencyUtil.getCurrencySymbol(defaultCurrency);

    final int totalSubscriptions = provider.subscriptions.length;
    final int activeEvents = provider.activeEventSubscriptions.length;

    return FadeTransition(
      opacity: Tween<double>(begin: 0.0, end: 1.0).animate(
          CurvedAnimation(parent: fadeController, curve: Curves.easeIn)),
      child: Padding(
        padding: const EdgeInsets.fromLTRB(16, 23, 16, 12),
        child: RepaintBoundary(
          child: Card(
            elevation: 3,
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(24),
              side: BorderSide(
                color: Theme.of(context)
                    .colorScheme
                    .outline
                    .withValues(alpha: 0.5),
              ),
            ),
            child: Container(
              width: double.infinity,
              constraints: BoxConstraints(
                minHeight: 180,
                maxHeight: activeEvents > 0 ? 300 : 240,
              ),
              decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(24),
              ),
              child: ClipRRect(
                borderRadius: BorderRadius.circular(24),
                child: Stack(
                  children: [
                    // 애니메이션 웨이브 배경
                    Positioned.fill(
                      child: AnimatedWaveBackground(
                        controller: waveController,
                        pulseController: pulseController,
                      ),
                    ),
                    Padding(
                      padding: const EdgeInsets.all(24.0),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        mainAxisSize: MainAxisSize.min,
                        children: [
                          Row(
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: [
                              Text(
                                AppLocalizations.of(context)
                                    .monthlyTotalSubscriptionCost,
                                style: TextStyle(
                                  color:
                                      Theme.of(context).colorScheme.onSurface,
                                  fontSize: 15,
                                  fontWeight: FontWeight.w500,
                                ),
                              ),
                              // 환율 정보 표시 (영어 사용자는 표시 안함)
                              if (locale != 'en')
                                FutureBuilder<String>(
                                  future:
                                      CurrencyUtil.getExchangeRateInfoForLocale(
                                          locale),
                                  builder: (context, snapshot) {
                                    if (snapshot.hasData &&
                                        snapshot.data!.isNotEmpty) {
                                      return Container(
                                        padding: const EdgeInsets.symmetric(
                                          horizontal: 8,
                                          vertical: 4,
                                        ),
                                        decoration: BoxDecoration(
                                          color: Theme.of(context)
                                              .colorScheme
                                              .primary
                                              .withValues(alpha: 0.08),
                                          borderRadius:
                                              BorderRadius.circular(4),
                                          border: Border.all(
                                            color: Theme.of(context)
                                                .colorScheme
                                                .primary
                                                .withValues(alpha: 0.3),
                                            width: 1,
                                          ),
                                        ),
                                        child: Text(
                                          AppLocalizations.of(context)
                                              .exchangeRateDisplay
                                              .replaceAll('@', snapshot.data!),
                                          style: TextStyle(
                                            fontSize: 12,
                                            fontWeight: FontWeight.w500,
                                            color: Theme.of(context)
                                                .colorScheme
                                                .primary,
                                          ),
                                        ),
                                      );
                                    }
                                    return const SizedBox.shrink();
                                  },
                                ),
                            ],
                          ),
                          const SizedBox(height: 8),
                          // 월별 총 비용 표시 (언어별 기본 통화)
                          FutureBuilder<double>(
                            future: CurrencyUtil
                                .calculateTotalMonthlyExpenseInDefaultCurrency(
                              provider.subscriptions,
                              locale,
                            ),
                            builder: (context, snapshot) {
                              if (!snapshot.hasData) {
                                return const CircularProgressIndicator();
                              }
                              final monthlyCost = snapshot.data!;
                              final decimals = (defaultCurrency == 'KRW' ||
                                      defaultCurrency == 'JPY')
                                  ? 0
                                  : 2;

                              return Row(
                                crossAxisAlignment: CrossAxisAlignment.baseline,
                                textBaseline: TextBaseline.alphabetic,
                                children: [
                                  // 통화 기호를 숫자 앞에 표시
                                  Text(
                                    currencySymbol,
                                    style: TextStyle(
                                      color: Theme.of(context)
                                          .colorScheme
                                          .onSurface,
                                      fontSize: 16,
                                      fontWeight: FontWeight.w600,
                                    ),
                                  ),
                                  const SizedBox(width: 6),
                                  Text(
                                    NumberFormat.currency(
                                      locale: defaultCurrency == 'KRW'
                                          ? 'ko_KR'
                                          : defaultCurrency == 'JPY'
                                              ? 'ja_JP'
                                              : defaultCurrency == 'CNY'
                                                  ? 'zh_CN'
                                                  : 'en_US',
                                      symbol: '',
                                      decimalDigits: decimals,
                                    ).format(monthlyCost),
                                    style: TextStyle(
                                      color: Theme.of(context)
                                          .colorScheme
                                          .onSurface,
                                      fontSize: 32,
                                      fontWeight: FontWeight.bold,
                                      letterSpacing: -1,
                                    ),
                                  ),
                                ],
                              );
                            },
                          ),
                          const SizedBox(height: 16),
                          // 연간 비용 및 총 구독 수 표시
                          FutureBuilder<double>(
                            future: CurrencyUtil
                                .calculateTotalMonthlyExpenseInDefaultCurrency(
                              provider.subscriptions,
                              locale,
                            ),
                            builder: (context, snapshot) {
                              if (!snapshot.hasData) {
                                return const SizedBox();
                              }
                              final monthlyCost = snapshot.data!;
                              final yearlyCost = monthlyCost * 12;
                              final decimals = (defaultCurrency == 'KRW' ||
                                      defaultCurrency == 'JPY')
                                  ? 0
                                  : 2;

                              return Row(
                                children: [
                                  _buildInfoBox(
                                    context,
                                    title: AppLocalizations.of(context)
                                        .estimatedAnnualCost,
                                    value: NumberFormat.currency(
                                      locale: defaultCurrency == 'KRW'
                                          ? 'ko_KR'
                                          : defaultCurrency == 'JPY'
                                              ? 'ja_JP'
                                              : defaultCurrency == 'CNY'
                                                  ? 'zh_CN'
                                                  : 'en_US',
                                      symbol: currencySymbol,
                                      decimalDigits: decimals,
                                    ).format(yearlyCost),
                                  ),
                                  const SizedBox(width: 16),
                                  _buildInfoBox(
                                    context,
                                    title: AppLocalizations.of(context)
                                        .totalSubscriptionServices,
                                    value:
                                        '$totalSubscriptions${AppLocalizations.of(context).servicesUnit}',
                                  ),
                                ],
                              );
                            },
                          ),
                          // 이벤트 절약액 표시
                          if (activeEvents > 0) ...[
                            const SizedBox(height: 12),
                            Container(
                              padding: const EdgeInsets.symmetric(
                                  vertical: 10, horizontal: 14),
                              decoration: BoxDecoration(
                                color: Theme.of(context)
                                    .colorScheme
                                    .surfaceContainerHighest
                                    .withValues(alpha: 0.4),
                                borderRadius: BorderRadius.circular(12),
                                border: Border.all(
                                  color: Theme.of(context)
                                      .colorScheme
                                      .outline
                                      .withValues(alpha: 0.3),
                                  width: 1,
                                ),
                              ),
                              child: Row(
                                mainAxisSize: MainAxisSize.min,
                                children: [
                                  Container(
                                    padding: const EdgeInsets.all(6),
                                    decoration: BoxDecoration(
                                      color: Theme.of(context)
                                          .colorScheme
                                          .primary
                                          .withValues(alpha: 0.12),
                                      shape: BoxShape.circle,
                                    ),
                                    child: Icon(
                                      Icons.local_offer_rounded,
                                      size: 14,
                                      color:
                                          Theme.of(context).colorScheme.primary,
                                    ),
                                  ),
                                  const SizedBox(width: 10),
                                  Column(
                                    crossAxisAlignment:
                                        CrossAxisAlignment.start,
                                    children: [
                                      Text(
                                        AppLocalizations.of(context)
                                            .eventDiscountActive,
                                        style: TextStyle(
                                          color: Theme.of(context)
                                              .colorScheme
                                              .onSurface,
                                          fontSize: 11,
                                          fontWeight: FontWeight.w500,
                                        ),
                                      ),
                                      const SizedBox(height: 2),
                                      // 이벤트 절약액 표시 (언어별 기본 통화)
                                      FutureBuilder<double>(
                                        future: CurrencyUtil
                                            .calculateTotalEventSavingsInDefaultCurrency(
                                          provider.subscriptions,
                                          locale,
                                        ),
                                        builder: (context, snapshot) {
                                          if (!snapshot.hasData) {
                                            return const SizedBox();
                                          }
                                          final eventSavings = snapshot.data!;
                                          final decimals =
                                              (defaultCurrency == 'KRW' ||
                                                      defaultCurrency == 'JPY')
                                                  ? 0
                                                  : 2;

                                          return Row(
                                            children: [
                                              Text(
                                                NumberFormat.currency(
                                                  locale: defaultCurrency ==
                                                          'KRW'
                                                      ? 'ko_KR'
                                                      : defaultCurrency == 'JPY'
                                                          ? 'ja_JP'
                                                          : defaultCurrency ==
                                                                  'CNY'
                                                              ? 'zh_CN'
                                                              : 'en_US',
                                                  symbol: currencySymbol,
                                                  decimalDigits: decimals,
                                                ).format(eventSavings),
                                                style: TextStyle(
                                                  color: Theme.of(context)
                                                      .colorScheme
                                                      .primary,
                                                  fontSize: 14,
                                                  fontWeight: FontWeight.bold,
                                                ),
                                              ),
                                              Text(
                                                ' ${AppLocalizations.of(context).saving} ($activeEvents${AppLocalizations.of(context).servicesUnit})',
                                                style: TextStyle(
                                                  color: Theme.of(context)
                                                      .colorScheme
                                                      .onSurfaceVariant,
                                                  fontSize: 12,
                                                  fontWeight: FontWeight.w500,
                                                ),
                                              ),
                                            ],
                                          );
                                        },
                                      ),
                                    ],
                                  ),
                                ],
                              ),
                            ),
                          ],
                        ],
                      ),
                    ),
                  ],
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }

  Widget _buildInfoBox(BuildContext context,
      {required String title, required String value}) {
    return Expanded(
      child: Container(
        padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16),
        decoration: BoxDecoration(
          color: Theme.of(context)
              .colorScheme
              .surfaceContainerHighest
              .withValues(alpha: 0.5),
          borderRadius: BorderRadius.circular(12),
        ),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              title,
              style: TextStyle(
                color: Theme.of(context).colorScheme.onSurfaceVariant,
                fontSize: 12,
                fontWeight: FontWeight.w500,
              ),
            ),
            const SizedBox(height: 4),
            Text(
              value,
              style: TextStyle(
                color: Theme.of(context).colorScheme.onSurface,
                fontSize: 14,
                fontWeight: FontWeight.bold,
              ),
            ),
          ],
        ),
      ),
    );
  }
}
