import 'package:flutter/material.dart';

import 'package:askiineverdie/data/game_text_l10n.dart' as game_l10n;
import 'package:askiineverdie/l10n/app_localizations.dart';
import 'package:askiineverdie/src/features/front/widgets/hero_vs_boss_animation.dart';
import 'package:askiineverdie/src/shared/retro_colors.dart';
import 'package:askiineverdie/src/shared/widgets/retro_widgets.dart';

class FrontScreen extends StatelessWidget {
  const FrontScreen({
    super.key,
    this.onNewCharacter,
    this.onLoadSave,
    this.onHallOfFame,
    this.hasSaveFile = false,
  });

  /// "New character" 버튼 클릭 시 호출
  final void Function(BuildContext context)? onNewCharacter;

  /// "Load save" 버튼 클릭 시 호출
  final Future<void> Function(BuildContext context)? onLoadSave;

  /// "Hall of Fame" 버튼 클릭 시 호출
  final void Function(BuildContext context)? onHallOfFame;

  /// 세이브 파일 존재 여부 (새 캐릭터 시 경고용)
  final bool hasSaveFile;

  /// 새 캐릭터 생성 시 세이브 파일 존재하면 경고 표시
  void _handleNewCharacter(BuildContext context) {
    if (hasSaveFile) {
      _showDeleteWarningDialog(context);
    } else {
      onNewCharacter?.call(context);
    }
  }

  /// 세이브 삭제 경고 다이얼로그
  void _showDeleteWarningDialog(BuildContext context) {
    showDialog<void>(
      context: context,
      builder: (dialogContext) => AlertDialog(
        title: Text(game_l10n.uiWarning),
        content: Text(game_l10n.warningDeleteSave),
        actions: [
          TextButton(
            onPressed: () => Navigator.pop(dialogContext),
            child: Text(game_l10n.buttonCancel),
          ),
          FilledButton(
            onPressed: () {
              Navigator.pop(dialogContext);
              onNewCharacter?.call(context);
            },
            child: Text(game_l10n.buttonConfirm),
          ),
        ],
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: RetroColors.deepBrown,
      body: SafeArea(
        child: Column(
          children: [
            // 스크롤 영역 (헤더, 애니메이션, 버튼)
            Expanded(
              child: Center(
                child: ConstrainedBox(
                  constraints: const BoxConstraints(maxWidth: 800),
                  child: SingleChildScrollView(
                    padding: const EdgeInsets.all(16),
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.stretch,
                      children: [
                        const _RetroHeader(),
                        const SizedBox(height: 16),
                        const _AnimationPanel(),
                        const SizedBox(height: 16),
                        _ActionButtons(
                          onNewCharacter: onNewCharacter != null
                              ? () => _handleNewCharacter(context)
                              : null,
                          onLoadSave: onLoadSave != null
                              ? () => onLoadSave!(context)
                              : null,
                          onHallOfFame: onHallOfFame != null
                              ? () => onHallOfFame!(context)
                              : null,
                        ),
                      ],
                    ),
                  ),
                ),
              ),
            ),
            // 카피라이트 푸터 (하단 고정)
            const _CopyrightFooter(),
          ],
        ),
      ),
    );
  }
}

/// 레트로 스타일 헤더 (타이틀 + 태그)
class _RetroHeader extends StatelessWidget {
  const _RetroHeader();

  @override
  Widget build(BuildContext context) {
    final l10n = L10n.of(context);
    return RetroGoldPanel(
      padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 20),
      child: Column(
        children: [
          // 타이틀 (픽셀 폰트)
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              const Icon(Icons.auto_awesome, color: RetroColors.gold, size: 20),
              const SizedBox(width: 12),
              Text(
                l10n.appTitle,
                style: const TextStyle(
                  fontFamily: 'PressStart2P',
                  fontSize: 14,
                  color: RetroColors.gold,
                  shadows: [
                    Shadow(
                      color: RetroColors.goldDark,
                      offset: Offset(2, 2),
                    ),
                  ],
                ),
              ),
            ],
          ),
          const SizedBox(height: 16),
          // 태그 (레트로 스타일)
          Wrap(
            alignment: WrapAlignment.center,
            spacing: 8,
            runSpacing: 8,
            children: [
              _RetroTag(icon: Icons.cloud_off_outlined, label: l10n.tagNoNetwork),
              _RetroTag(icon: Icons.timer_outlined, label: l10n.tagIdleRpg),
              _RetroTag(icon: Icons.storage_rounded, label: l10n.tagLocalSaves),
            ],
          ),
        ],
      ),
    );
  }
}

/// 애니메이션 패널
class _AnimationPanel extends StatelessWidget {
  const _AnimationPanel();

  @override
  Widget build(BuildContext context) {
    return RetroPanel(
      title: 'BATTLE',
      padding: const EdgeInsets.all(8),
      child: const AspectRatio(
        aspectRatio: 16 / 9,
        child: HeroVsBossAnimation(),
      ),
    );
  }
}

/// 액션 버튼 (레트로 스타일)
class _ActionButtons extends StatelessWidget {
  const _ActionButtons({
    this.onNewCharacter,
    this.onLoadSave,
    this.onHallOfFame,
  });

  final VoidCallback? onNewCharacter;
  final VoidCallback? onLoadSave;
  final VoidCallback? onHallOfFame;

  @override
  Widget build(BuildContext context) {
    final l10n = L10n.of(context);

    return RetroPanel(
      title: 'MENU',
      padding: const EdgeInsets.all(12),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: [
          // 새 캐릭터 (Primary)
          RetroTextButton(
            text: l10n.newCharacter,
            icon: Icons.casino_outlined,
            onPressed: onNewCharacter,
          ),
          const SizedBox(height: 12),
          // 불러오기 (Secondary)
          RetroTextButton(
            text: l10n.loadSave,
            icon: Icons.folder_open,
            onPressed: onLoadSave,
            isPrimary: false,
          ),
          const SizedBox(height: 12),
          // 명예의 전당
          if (onHallOfFame != null)
            RetroTextButton(
              text: game_l10n.uiHallOfFame,
              icon: Icons.emoji_events_outlined,
              onPressed: onHallOfFame,
              isPrimary: false,
            ),
        ],
      ),
    );
  }
}

/// 카피라이트 푸터
class _CopyrightFooter extends StatelessWidget {
  const _CopyrightFooter();

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.symmetric(vertical: 12),
      child: Text(
        game_l10n.copyrightText,
        textAlign: TextAlign.center,
        style: const TextStyle(
          fontFamily: 'PressStart2P',
          fontSize: 6,
          color: RetroColors.textDisabled,
        ),
      ),
    );
  }
}

/// 레트로 태그 칩
class _RetroTag extends StatelessWidget {
  const _RetroTag({required this.icon, required this.label});

  final IconData icon;
  final String label;

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6),
      decoration: BoxDecoration(
        color: RetroColors.panelBgLight,
        border: Border.all(color: RetroColors.panelBorderInner, width: 1),
      ),
      child: Row(
        mainAxisSize: MainAxisSize.min,
        children: [
          Icon(icon, color: RetroColors.gold, size: 12),
          const SizedBox(width: 6),
          Text(
            label,
            style: const TextStyle(
              fontFamily: 'PressStart2P',
              fontSize: 7,
              color: RetroColors.textLight,
            ),
          ),
        ],
      ),
    );
  }
}
