import 'package:flutter/material.dart'; import 'package:line_icons/line_icons.dart'; import '../../../../common/extension/extension.dart'; import '../../../../common/theme/theme.dart'; import '../../../../domain/analytic/analytic.dart'; class PurchaseVendorCard extends StatelessWidget { final PurchasingVendorData data; final int index; final Animation animation; const PurchaseVendorCard({ super.key, required this.data, required this.index, required this.animation, }); @override Widget build(BuildContext context) { return FadeTransition( opacity: animation, child: Container( margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 6), padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: AppColor.surface, borderRadius: BorderRadius.circular(14), border: Border.all(color: AppColor.border.withOpacity(0.25)), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.04), blurRadius: 10, offset: const Offset(0, 3), ), ], ), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ // Rank badge Container( width: 36, height: 36, decoration: BoxDecoration( gradient: const LinearGradient( colors: AppColor.primaryGradient, begin: Alignment.topLeft, end: Alignment.bottomRight, ), borderRadius: BorderRadius.circular(10), ), child: Center( child: Text( '${index + 1}', style: AppStyle.sm.copyWith( color: AppColor.textWhite, fontWeight: FontWeight.w800, ), ), ), ), const SizedBox(width: 12), // Vendor icon Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: AppColor.info.withOpacity(0.1), borderRadius: BorderRadius.circular(10), ), child: const Icon( LineIcons.truck, color: AppColor.info, size: 20, ), ), const SizedBox(width: 12), // Name, chips, and total cost — all in one column Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Vendor name + total cost on same row Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: Text( data.vendorName.trim(), style: AppStyle.md.copyWith( fontWeight: FontWeight.w700, color: AppColor.textPrimary, ), maxLines: 2, overflow: TextOverflow.ellipsis, ), ), const SizedBox(width: 8), Text( data.totalCost.currencyFormatRp, style: AppStyle.md.copyWith( fontWeight: FontWeight.w800, color: AppColor.primary, ), ), ], ), const SizedBox(height: 6), // Chips — wrap to next line if not enough space Wrap( spacing: 6, runSpacing: 4, children: [ _Chip( label: '${data.purchaseOrderCount} PO', color: AppColor.info, ), _Chip( label: '${data.ingredientCount} bahan', color: AppColor.secondary, ), _Chip( label: '${data.quantity} pcs', color: AppColor.warning, ), ], ), ], ), ), ], ), ), ); } } class _Chip extends StatelessWidget { final String label; final Color color; const _Chip({required this.label, required this.color}); @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 3), decoration: BoxDecoration( color: color.withOpacity(0.1), borderRadius: BorderRadius.circular(8), ), child: Text( label, style: AppStyle.xs.copyWith( color: color, fontWeight: FontWeight.w600, ), ), ); } }