import 'package:flutter/material.dart';

import 'package:asciineverdie/src/shared/retro_colors.dart';

/// 패널 헤더 변형
enum PanelHeaderVariant {
  /// 기본 패널 헤더 (레트로 스타일, 골드 하단 테두리)
  ///
  /// 사용처: 메인 패널 상단, 골드 강조 필요한 곳
  primary,

  /// 섹션 헤더 (테마 색상 사용)
  ///
  /// 사용처: 리스트 섹션 구분, 탭 페이지 내부
  section,

  /// 장비 헤더 (3D 베벨 테두리)
  ///
  /// 사용처: 장비 패널, 중요 강조 영역
  equipment,
}

/// 레트로 스타일 패널 헤더 위젯
///
/// 여러 화면에서 반복되는 패널/섹션 헤더를 통합한 공통 위젯.
/// [variant]에 따라 다른 스타일이 적용됨.
///
/// 사용 예시:
/// ```dart
/// PanelHeader(title: 'INVENTORY')
/// PanelHeader(title: 'Stats', variant: PanelHeaderVariant.section)
/// ```
class PanelHeader extends StatelessWidget {
  const PanelHeader({
    required this.title,
    this.variant = PanelHeaderVariant.primary,
    this.icon,
    this.uppercase = true,
    super.key,
  });

  /// 헤더 제목
  final String title;

  /// 헤더 스타일 변형
  final PanelHeaderVariant variant;

  /// 선택적 아이콘 (equipment 변형에서 주로 사용)
  final IconData? icon;

  /// 대문자 변환 여부 (기본 true)
  final bool uppercase;

  @override
  Widget build(BuildContext context) {
    final displayTitle = uppercase ? title.toUpperCase() : title;

    return switch (variant) {
      PanelHeaderVariant.primary => _buildPrimaryHeader(context, displayTitle),
      PanelHeaderVariant.section => _buildSectionHeader(context, displayTitle),
      PanelHeaderVariant.equipment => _buildEquipmentHeader(
        context,
        displayTitle,
      ),
    };
  }

  /// 기본 패널 헤더 (레트로 스타일)
  Widget _buildPrimaryHeader(BuildContext context, String displayTitle) {
    final gold = RetroColors.goldOf(context);
    final panelBg = RetroColors.panelBgOf(context);

    return Container(
      padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 6),
      decoration: BoxDecoration(
        color: panelBg,
        border: Border(bottom: BorderSide(color: gold, width: 2)),
      ),
      child: Text(
        displayTitle,
        style: TextStyle(
          fontFamily: 'PressStart2P',
          fontSize: 7,
          fontWeight: FontWeight.bold,
          color: gold,
        ),
      ),
    );
  }

  /// 섹션 헤더 (테마 색상)
  Widget _buildSectionHeader(BuildContext context, String displayTitle) {
    final colorScheme = Theme.of(context).colorScheme;

    return Container(
      padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
      color: colorScheme.primaryContainer,
      child: Text(
        displayTitle,
        style: TextStyle(
          fontWeight: FontWeight.bold,
          fontSize: 18,
          color: colorScheme.onPrimaryContainer,
        ),
      ),
    );
  }

  /// 장비 헤더 (3D 베벨 테두리)
  Widget _buildEquipmentHeader(BuildContext context, String displayTitle) {
    final gold = RetroColors.goldOf(context);
    final goldDark = RetroColors.goldDarkOf(context);
    final panelBg = RetroColors.panelBgOf(context);

    return Container(
      padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
      decoration: BoxDecoration(
        color: panelBg,
        border: Border(
          top: BorderSide(color: gold, width: 2),
          left: BorderSide(color: gold, width: 2),
          bottom: BorderSide(color: goldDark, width: 2),
          right: BorderSide(color: goldDark, width: 2),
        ),
      ),
      child: Row(
        children: [
          if (icon != null) ...[
            Icon(icon, size: 16, color: gold),
            const SizedBox(width: 8),
          ],
          Text(
            displayTitle,
            style: TextStyle(
              fontWeight: FontWeight.bold,
              fontSize: 18,
              color: gold,
            ),
          ),
        ],
      ),
    );
  }
}

/// 뮤트(회색) 섹션 헤더
///
/// game_play_screen.dart의 _buildSectionHeader와 동일한 스타일.
/// 메인 패널 내부의 작은 섹션 구분에 사용.
class MutedSectionHeader extends StatelessWidget {
  const MutedSectionHeader({required this.title, super.key});

  /// 헤더 제목
  final String title;

  @override
  Widget build(BuildContext context) {
    final textMuted = RetroColors.textMutedOf(context);

    return Padding(
      padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
      child: Text(
        title.toUpperCase(),
        style: TextStyle(
          fontFamily: 'PressStart2P',
          fontSize: 7,
          color: textMuted,
        ),
      ),
    );
  }
}
