import 'package:flutter/material.dart';
import 'package:shadcn_ui/shadcn_ui.dart';
import 'package:superport/data/models/vendor_dto.dart';
import 'package:superport/core/constants/app_constants.dart';

class VendorTable extends StatelessWidget {
  final List<VendorDto> vendors;
  final int currentPage;
  final int totalPages;
  final Function(int) onPageChanged;
  final Function(int) onEdit;
  final Function(int, String) onDelete;
  final Function(int) onRestore;

  const VendorTable({
    super.key,
    required this.vendors,
    required this.currentPage,
    required this.totalPages,
    required this.onPageChanged,
    required this.onEdit,
    required this.onDelete,
    required this.onRestore,
  });

  @override
  Widget build(BuildContext context) {
    final theme = ShadTheme.of(context);

    return Column(
      children: [
        Expanded(
          child: ShadCard(
            child: SingleChildScrollView(
              child: DataTable(
                horizontalMargin: 16,
                columnSpacing: 24,
                columns: const [
                  DataColumn(label: Text('No')),
                  DataColumn(label: Text('벤더명')),
                  DataColumn(label: Text('등록일')),
                  DataColumn(label: Text('상태')),
                  DataColumn(label: Text('작업')),
                ],
                rows: vendors.asMap().entries.map((entry) {
                  final index = entry.key;
                  final vendor = entry.value;
                  final rowNumber = (currentPage - 1) * AppConstants.vendorPageSize + index + 1;
                  
                  return DataRow(
                    cells: [
                      DataCell(
                        Text(
                          rowNumber.toString(),
                          style: const TextStyle(
                            fontWeight: FontWeight.w400,
                            color: Colors.grey,
                          ),
                        ),
                      ),
                      DataCell(
                        Text(
                          vendor.name,
                          style: const TextStyle(fontWeight: FontWeight.w500),
                        ),
                      ),
                      DataCell(
                        Text(
                          vendor.createdAt != null
                              ? vendor.createdAt!.toLocal().toString().split(' ')[0]
                              : '-',
                        ),
                      ),
                      DataCell(
                        Container(
                          padding: const EdgeInsets.symmetric(
                            horizontal: 8,
                            vertical: 4,
                          ),
                          decoration: BoxDecoration(
                            color: vendor.isActive
                                ? Colors.green.withValues(alpha: 0.1)
                                : Colors.grey.withValues(alpha: 0.1),
                            borderRadius: BorderRadius.circular(12),
                          ),
                          child: Text(
                            vendor.isActive ? '활성' : '비활성',
                            style: TextStyle(
                              color: vendor.isActive
                                  ? Colors.green.shade700
                                  : Colors.grey.shade700,
                              fontSize: 12,
                              fontWeight: FontWeight.w500,
                            ),
                          ),
                        ),
                      ),
                      DataCell(
                        Row(
                          mainAxisSize: MainAxisSize.min,
                          children: [
                            if (vendor.id != null) ...[
                              if (vendor.isActive) ...[
                                ShadButton.ghost(
                                  onPressed: () => onEdit(vendor.id!),
                                  size: ShadButtonSize.sm,
                                  child: const Icon(Icons.edit, size: 16),
                                ),
                                const SizedBox(width: 4),
                                ShadButton.ghost(
                                  onPressed: () => onDelete(vendor.id!, vendor.name),
                                  size: ShadButtonSize.sm,
                                  child: Icon(
                                    Icons.delete,
                                    size: 16,
                                    color: theme.colorScheme.destructive,
                                  ),
                                ),
                              ] else
                                ShadButton.ghost(
                                  onPressed: () => onRestore(vendor.id!),
                                  size: ShadButtonSize.sm,
                                  child: const Icon(
                                    Icons.restore,
                                    size: 16,
                                    color: Color(0xFF10B981),
                                  ),
                                ),
                            ],
                          ],
                        ),
                      ),
                    ],
                  );
                }).toList(),
              ),
            ),
          ),
        ),
        
        // 페이지네이션
        if (totalPages > 1)
          Container(
            padding: const EdgeInsets.all(16),
            decoration: BoxDecoration(
              border: Border(
                top: BorderSide(
                  color: theme.colorScheme.border,
                  width: 1,
                ),
              ),
            ),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                ShadButton.ghost(
                  onPressed: currentPage > 1
                      ? () => onPageChanged(currentPage - 1)
                      : null,
                  size: ShadButtonSize.sm,
                  child: const Icon(Icons.chevron_left, size: 16),
                ),
                const SizedBox(width: 8),
                ...List.generate(
                  totalPages > 5 ? 5 : totalPages,
                  (index) {
                    int pageNumber;
                    if (totalPages <= 5) {
                      pageNumber = index + 1;
                    } else if (currentPage <= 3) {
                      pageNumber = index + 1;
                    } else if (currentPage >= totalPages - 2) {
                      pageNumber = totalPages - 4 + index;
                    } else {
                      pageNumber = currentPage - 2 + index;
                    }
                    
                    if (pageNumber > totalPages) return const SizedBox.shrink();
                    
                    return Padding(
                      padding: const EdgeInsets.symmetric(horizontal: 2),
                      child: pageNumber == currentPage
                          ? ShadButton(
                              onPressed: () => onPageChanged(pageNumber),
                              size: ShadButtonSize.sm,
                              child: Text(pageNumber.toString()),
                            )
                          : ShadButton.outline(
                              onPressed: () => onPageChanged(pageNumber),
                              size: ShadButtonSize.sm,
                              child: Text(pageNumber.toString()),
                            ),
                    );
                  },
                ),
                const SizedBox(width: 8),
                ShadButton.ghost(
                  onPressed: currentPage < totalPages
                      ? () => onPageChanged(currentPage + 1)
                      : null,
                  size: ShadButtonSize.sm,
                  child: const Icon(Icons.chevron_right, size: 16),
                ),
                const SizedBox(width: 24),
                Text(
                  '페이지 $currentPage / $totalPages',
                  style: theme.textTheme.muted,
                ),
              ],
            ),
          ),
      ],
    );
  }
}