import 'package:flutter/material.dart';
import 'package:superport/screens/common/theme_shadcn.dart';

/// 모든 리스트 화면의 기본 레이아웃을 제공하는 베이스 위젯
/// 
/// 일관된 레이아웃 구조를 보장하기 위한 템플릿
class BaseListScreen extends StatelessWidget {
  final Widget? headerSection;  // 상단 통계 카드 등
  final Widget searchBar;       // 검색바 섹션
  final Widget? filterSection;  // 필터 섹션
  final Widget actionBar;       // 액션 버튼 섹션
  final Widget dataTable;       // 데이터 테이블
  final Widget? pagination;     // 페이지네이션
  final bool isLoading;
  final String? error;
  final VoidCallback? onRefresh;
  final String emptyMessage;
  final IconData emptyIcon;
  // 데이터 테이블 영역 좌우 패딩(기본: spacing6). 화면별로 전체폭 사용이 필요할 경우 0으로 설정.
  final EdgeInsetsGeometry dataAreaPadding;

  const BaseListScreen({
    super.key,
    this.headerSection,
    required this.searchBar,
    this.filterSection,
    required this.actionBar,
    required this.dataTable,
    this.pagination,
    this.isLoading = false,
    this.error,
    this.onRefresh,
    this.emptyMessage = '데이터가 없습니다',
    this.emptyIcon = Icons.inbox_outlined,
    // 기본값을 0으로 설정해 테이블 영역이 가용 폭을 모두 사용하도록 함
    this.dataAreaPadding = EdgeInsets.zero,
  });

  @override
  Widget build(BuildContext context) {
    if (isLoading) {
      return _buildLoadingState();
    }

    if (error != null) {
      return _buildErrorState();
    }

    return Container(
      color: ShadcnTheme.background,
      child: Column(
        children: [
          // 고정 헤더 섹션 (스크롤되지 않음)
          Container(
            color: ShadcnTheme.background,
            padding: const EdgeInsets.all(ShadcnTheme.spacing6),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                // 헤더 섹션 (통계 카드 등)
                if (headerSection != null) ...[
                  headerSection!,
                  const SizedBox(height: ShadcnTheme.spacing4),
                ],

                // 검색바 섹션
                searchBar,
                const SizedBox(height: ShadcnTheme.spacing4),

                // 필터 섹션
                if (filterSection != null) ...[
                  filterSection!,
                  const SizedBox(height: ShadcnTheme.spacing4),
                ],

                // 액션바 섹션
                actionBar,
              ],
            ),
          ),
          
          // 데이터 테이블 - 헤더 고정, 바디만 스크롤
          Expanded(
            child: Padding(
              padding: dataAreaPadding,
              child: dataTable,
            ),
          ),

          // 고정 페이지네이션 (스크롤되지 않음)
          if (pagination != null) ...[
            Container(
              color: ShadcnTheme.background,
              padding: const EdgeInsets.all(ShadcnTheme.spacing6),
              child: pagination!,
            ),
          ],
        ],
      ),
    );
  }

  Widget _buildLoadingState() {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          CircularProgressIndicator(color: ShadcnTheme.primary),
          const SizedBox(height: ShadcnTheme.spacing4),
          Text('데이터를 불러오는 중...', style: ShadcnTheme.bodyMuted),
        ],
      ),
    );
  }

  Widget _buildErrorState() {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Icon(Icons.error_outline, size: 48, color: ShadcnTheme.destructive),
          const SizedBox(height: ShadcnTheme.spacing4),
          Text('오류가 발생했습니다', style: ShadcnTheme.headingH4),
          const SizedBox(height: ShadcnTheme.spacing2),
          Text(error ?? '', style: ShadcnTheme.bodyMuted),
          if (onRefresh != null) ...[
            const SizedBox(height: ShadcnTheme.spacing4),
            ElevatedButton(
              onPressed: onRefresh,
              style: ElevatedButton.styleFrom(
                backgroundColor: ShadcnTheme.primary,
                foregroundColor: ShadcnTheme.primaryForeground,
                shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(ShadcnTheme.radiusMd),
                ),
              ),
              child: const Text('다시 시도'),
            ),
          ],
        ],
      ),
    );
  }

  Widget buildEmptyState() {
    return Container(
      padding: const EdgeInsets.all(ShadcnTheme.spacing8),
      child: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Icon(emptyIcon, size: 48, color: ShadcnTheme.mutedForeground),
            const SizedBox(height: ShadcnTheme.spacing4),
            Text(emptyMessage, style: ShadcnTheme.bodyMuted),
          ],
        ),
      ),
    );
  }
}
