import 'package:flutter/material.dart';

import 'package:pshared/models/payment/operation.dart';

import 'package:pweb/pages/report/cards/operation_card_utils.dart';
import 'package:pweb/pages/report/cards/operation_info_row.dart';
import 'package:pweb/pages/report/table/badge.dart';
import 'package:pweb/utils/report/format.dart';
import 'package:pweb/utils/report/payment_mapper.dart';

import 'package:pweb/generated/i18n/app_localizations.dart';


class OperationCard extends StatelessWidget {
  final OperationItem operation;
  final ValueChanged<OperationItem>? onTap;

  const OperationCard({super.key, required this.operation, this.onTap});

  @override
  Widget build(BuildContext context) {
    final loc = AppLocalizations.of(context)!;
    final theme = Theme.of(context);
    final canOpen = onTap != null && paymentIdFromOperation(operation) != null;
    final amountLabel = formatAmount(
      context,
      operation.amount,
      operation.currency,
    );
    final toAmountLabel = formatAmount(
      context,
      operation.toAmount,
      operation.toCurrency,
    );
    final showToAmount = shouldShowToAmount(operation);
    final timeLabel = formatOperationTime(context, operation.date);

    return Card(
      elevation: 0,
      shape: RoundedRectangleBorder(
        side: BorderSide(color: theme.dividerColor.withAlpha(25)),
        borderRadius: BorderRadius.circular(16),
      ),
      clipBehavior: Clip.antiAlias,
      child: InkWell(
        onTap: canOpen ? () => onTap?.call(operation) : null,
        child: Padding(
          padding: const EdgeInsets.all(16),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Row(
                children: [
                  OperationStatusBadge(status: operation.status),
                  const Spacer(),
                  Text(
                    timeLabel,
                    style: theme.textTheme.bodySmall?.copyWith(
                      color: theme.colorScheme.onSurfaceVariant,
                    ),
                  ),
                ],
              ),
              const SizedBox(height: 12),
              Text(
                amountLabel,
                style: theme.textTheme.titleLarge?.copyWith(
                  fontWeight: FontWeight.w600,
                ),
              ),
              if (showToAmount)
                Text(
                  loc.recipientWillReceive(toAmountLabel),
                  style: theme.textTheme.bodyMedium?.copyWith(
                    color: theme.colorScheme.onSurfaceVariant,
                  ),
                ),
              if ((operation.fileName ?? '').trim().isNotEmpty) ...[
                const SizedBox(height: 6),
                OperationInfoRow(
                  icon: Icons.description,
                  value: operation.fileName!,
                ),
              ],
            ],
          ),
        ),
      ),
    );
  }
}
