import 'package:flutter/material.dart';
import '../../controllers/add_subscription_controller.dart';
import '../../l10n/app_localizations.dart';
import '../common/form_fields/currency_input_field.dart';
import '../common/form_fields/date_picker_field.dart';
// import '../../theme/app_colors.dart';

/// 구독 추가 화면의 이벤트/할인 섹션
class AddSubscriptionEventSection extends StatelessWidget {
  final AddSubscriptionController controller;
  final Animation<double> fadeAnimation;
  final Animation<Offset> slideAnimation;
  final Function setState;

  const AddSubscriptionEventSection({
    super.key,
    required this.controller,
    required this.fadeAnimation,
    required this.slideAnimation,
    required this.setState,
  });

  @override
  Widget build(BuildContext context) {
    return FadeTransition(
      opacity: Tween<double>(begin: 0.0, end: 1.0).animate(
        CurvedAnimation(
          parent: controller.animationController!,
          curve: const Interval(0.4, 1.0, curve: Curves.easeIn),
        ),
      ),
      child: SlideTransition(
        position: Tween<Offset>(
          begin: const Offset(0.0, 0.5),
          end: Offset.zero,
        ).animate(CurvedAnimation(
          parent: controller.animationController!,
          curve: const Interval(0.4, 1.0, curve: Curves.easeOutCubic),
        )),
        child: Container(
          margin: const EdgeInsets.only(bottom: 20),
          padding: const EdgeInsets.all(24),
          decoration: BoxDecoration(
            color: Theme.of(context).colorScheme.surface,
            borderRadius: BorderRadius.circular(20),
            border: Border.all(
              color:
                  Theme.of(context).colorScheme.outline.withValues(alpha: 0.3),
              width: 1,
            ),
          ),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  Row(
                    children: [
                      Container(
                        padding: const EdgeInsets.all(8),
                        decoration: BoxDecoration(
                          color: controller.gradientColors[0]
                              .withValues(alpha: 0.1),
                          borderRadius: BorderRadius.circular(12),
                        ),
                        child: Icon(
                          Icons.local_offer_rounded,
                          color: controller.gradientColors[0],
                          size: 24,
                        ),
                      ),
                      const SizedBox(width: 12),
                      Builder(
                        builder: (context) {
                          final loc = AppLocalizations.of(context);
                          return Text(
                            loc.eventPrice,
                            style: TextStyle(
                              fontSize: 18,
                              fontWeight: FontWeight.w700,
                              color: Theme.of(context).colorScheme.onSurface,
                            ),
                          );
                        },
                      ),
                    ],
                  ),
                  Switch.adaptive(
                    value: controller.isEventActive,
                    onChanged: (value) {
                      setState(() {
                        controller.isEventActive = value;
                        if (!controller.isEventActive) {
                          // 이벤트 비활성화 시 관련 데이터 초기화
                          controller.eventStartDate = null;
                          controller.eventEndDate = null;
                          controller.eventPriceController.clear();
                        }
                      });
                    },
                    activeThumbColor: controller.gradientColors[0],
                    activeTrackColor:
                        controller.gradientColors[0].withValues(alpha: 0.5),
                  ),
                ],
              ),

              // 이벤트 활성화 시 추가 필드 표시
              AnimatedContainer(
                duration: const Duration(milliseconds: 300),
                height: controller.isEventActive ? null : 0,
                child: AnimatedOpacity(
                  duration: const Duration(milliseconds: 300),
                  opacity: controller.isEventActive ? 1.0 : 0.0,
                  child: Column(
                    children: [
                      const SizedBox(height: 20),
                      // 이벤트 설명
                      Container(
                        padding: const EdgeInsets.all(12),
                        decoration: BoxDecoration(
                          color: Theme.of(context)
                              .colorScheme
                              .tertiary
                              .withValues(alpha: 0.08),
                          borderRadius: BorderRadius.circular(12),
                          border: Border.all(
                            color: Theme.of(context)
                                .colorScheme
                                .tertiary
                                .withValues(alpha: 0.3),
                            width: 1,
                          ),
                        ),
                        child: Row(
                          children: [
                            Icon(
                              Icons.info_outline_rounded,
                              color: Theme.of(context).colorScheme.tertiary,
                              size: 20,
                            ),
                            const SizedBox(width: 8),
                            Expanded(
                              child: Builder(
                                builder: (context) {
                                  final loc = AppLocalizations.of(context);
                                  final infoText = loc.eventPriceHint;
                                  return Text(
                                    infoText,
                                    style: TextStyle(
                                      fontSize: 14,
                                      color: Theme.of(context)
                                          .colorScheme
                                          .onSurface,
                                      fontWeight: FontWeight.w500,
                                    ),
                                  );
                                },
                              ),
                            ),
                          ],
                        ),
                      ),
                      const SizedBox(height: 20),

                      // 이벤트 기간
                      Builder(
                        builder: (context) {
                          final loc = AppLocalizations.of(context);
                          final startLabel = loc.startDate;
                          final endLabel = loc.endDate;
                          return DateRangePickerField(
                            startDate: controller.eventStartDate,
                            endDate: controller.eventEndDate,
                            onStartDateSelected: (date) {
                              setState(() {
                                controller.eventStartDate = date;
                                // 시작일 설정 시 종료일이 없으면 자동으로 1달 후로 설정
                                if (date != null &&
                                    controller.eventEndDate == null) {
                                  controller.eventEndDate =
                                      date.add(const Duration(days: 30));
                                }
                              });
                            },
                            onEndDateSelected: (date) {
                              setState(() {
                                controller.eventEndDate = date;
                              });
                            },
                            startLabel: startLabel,
                            endLabel: endLabel,
                            primaryColor: controller.gradientColors[0],
                          );
                        },
                      ),
                      const SizedBox(height: 20),

                      // 이벤트 가격
                      Builder(
                        builder: (BuildContext innerContext) {
                          final loc = AppLocalizations.of(innerContext);

                          return CurrencyInputField(
                            controller: controller.eventPriceController,
                            currency: controller.currency,
                            label: loc.eventPrice,
                            hintText: loc.eventPriceHint,
                            enabled: controller.isEventActive,
                            // 이벤트 비활성화 시 검증을 건너뛰어 저장이 막히지 않도록 처리
                            validator:
                                controller.isEventActive ? null : (_) => null,
                          );
                        },
                      ),
                    ],
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
