import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../controllers/detail_screen_controller.dart';
import '../../providers/category_provider.dart';
import '../../theme/app_colors.dart';
import '../common/form_fields/base_text_field.dart';
import '../common/form_fields/currency_input_field.dart';
import '../common/form_fields/date_picker_field.dart';
import '../common/form_fields/currency_selector.dart';
import '../common/form_fields/billing_cycle_selector.dart';
import '../common/form_fields/category_selector.dart';
import '../../l10n/app_localizations.dart';

/// 상세 화면 폼 섹션
/// 구독 정보를 편집할 수 있는 폼 필드들을 포함합니다.
class DetailFormSection extends StatelessWidget {
  final DetailScreenController controller;
  final Animation<double> fadeAnimation;
  final Animation<Offset> slideAnimation;

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

  @override
  Widget build(BuildContext context) {
    return Consumer<DetailScreenController>(
      builder: (context, controller, child) {
        final baseColor = controller.getCardColor();

        return FadeTransition(
      opacity: fadeAnimation,
      child: SlideTransition(
        position: Tween<Offset>(
          begin: const Offset(0.0, 0.6),
          end: Offset.zero,
        ).animate(CurvedAnimation(
          parent: controller.animationController!,
          curve: const Interval(0.3, 1.0, curve: Curves.easeOutCubic),
        )),
        child: Container(
          decoration: BoxDecoration(
            color: AppColors.glassCard,
            borderRadius: BorderRadius.circular(20),
            border: Border.all(
              color: AppColors.glassBorder.withValues(alpha: 0.1),
              width: 1,
            ),
            boxShadow: [
              BoxShadow(
                color: AppColors.shadowBlack,
                blurRadius: 10,
                offset: const Offset(0, 4),
              ),
            ],
          ),
          child: Padding(
            padding: const EdgeInsets.all(24),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              mainAxisSize: MainAxisSize.min,
              children: [
                // 서비스명 필드
                BaseTextField(
                  controller: controller.serviceNameController,
                  focusNode: controller.serviceNameFocus,
                  label: AppLocalizations.of(context).subscriptionName,
                  hintText: AppLocalizations.of(context).serviceNameExample,
                  textInputAction: TextInputAction.next,
                  onEditingComplete: () {
                    controller.monthlyCostFocus.requestFocus();
                  },
                ),
                const SizedBox(height: 20),

                // 월 지출 및 통화 선택
                Row(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Expanded(
                      flex: 2,
                      child: CurrencyInputField(
                        controller: controller.monthlyCostController,
                        currency: controller.currency,
                        label: AppLocalizations.of(context).monthlyExpense,
                        focusNode: controller.monthlyCostFocus,
                        textInputAction: TextInputAction.next,
                        onEditingComplete: () {
                          controller.billingCycleFocus.requestFocus();
                        },
                      ),
                    ),
                    const SizedBox(width: 12),
                    Expanded(
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Text(
                            AppLocalizations.of(context).currency,
                            style: const TextStyle(
                              fontSize: 16,
                              fontWeight: FontWeight.w600,
                              color: AppColors.darkNavy,
                            ),
                          ),
                          const SizedBox(height: 8),
                          CurrencySelector(
                            currency: controller.currency,
                            isGlassmorphism: true,
                            onChanged: (value) {
                              controller.currency = value;
                              // 통화 변경시 금액 포맷 업데이트
                              if (value == 'KRW') {
                                final amount = double.tryParse(
                                  controller.monthlyCostController.text.replaceAll(',', '')
                                );
                                if (amount != null) {
                                  controller.monthlyCostController.text = 
                                      amount.toInt().toString();
                                }
                              }
                            },
                          ),
                        ],
                      ),
                    ),
                  ],
                ),
                const SizedBox(height: 20),

                // 결제 주기
                Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(
                      AppLocalizations.of(context).billingCycle,
                      style: const TextStyle(
                        fontSize: 16,
                        fontWeight: FontWeight.w600,
                        color: AppColors.darkNavy,
                      ),
                    ),
                    const SizedBox(height: 8),
                    BillingCycleSelector(
                      billingCycle: controller.billingCycle,
                      baseColor: baseColor,
                      isGlassmorphism: true,
                      onChanged: (value) {
                        controller.billingCycle = value;
                      },
                    ),
                  ],
                ),
                const SizedBox(height: 20),

                // 다음 결제일
                DatePickerField(
                  selectedDate: controller.nextBillingDate,
                  onDateSelected: (date) {
                    controller.nextBillingDate = date;
                  },
                  label: AppLocalizations.of(context).nextBillingDate,
                  firstDate: DateTime.now(),
                  lastDate: DateTime.now().add(const Duration(days: 365 * 2)),
                  primaryColor: baseColor,
                ),
                const SizedBox(height: 20),

                // 카테고리 선택
                Consumer<CategoryProvider>(
                  builder: (context, categoryProvider, child) {
                    return Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        Text(
                          AppLocalizations.of(context).category,
                          style: const TextStyle(
                            fontSize: 16,
                            fontWeight: FontWeight.w600,
                            color: AppColors.darkNavy,
                          ),
                        ),
                        const SizedBox(height: 8),
                        CategorySelector(
                          categories: categoryProvider.categories,
                          selectedCategoryId: controller.selectedCategoryId,
                          baseColor: baseColor,
                          isGlassmorphism: true,
                          onChanged: (categoryId) {
                            controller.selectedCategoryId = categoryId;
                          },
                        ),
                      ],
                    );
                  },
                ),
              ],
            ),
          ),
        ),
      ),
    );
      },
    );
  }
}

