import 'package:flutter/material.dart'; import 'package:shimmer/shimmer.dart'; import '../../../../application/analytic/purchasing_analytic_loader/purchasing_analytic_loader_bloc.dart'; import '../../../../common/extension/extension.dart'; import '../../../../common/theme/theme.dart'; import '../../../components/spacer/spacer.dart'; class PurchaseRincianCard extends StatelessWidget { final PurchasingAnalyticLoaderState state; const PurchaseRincianCard({super.key, required this.state}); @override Widget build(BuildContext context) { if (state.isFetching) return _buildShimmer(); final summary = state.purchasing.summary; return Container( padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: AppColor.surface, borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.04), blurRadius: 10, offset: const Offset(0, 2), ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( context.lang.daily_breakdown, style: AppStyle.xl.copyWith( fontWeight: FontWeight.bold, color: AppColor.textPrimary, fontSize: 18, ), ), const SpaceHeight(16), _buildRow('Total Pembelian', summary.totalPurchases.currencyFormatRp), _buildDivider(), _buildRow( 'Bahan Baku', summary.rawMaterialPurchases.currencyFormatRp, ), _buildDivider(), _buildRow('Pengeluaran', summary.expensePurchases.currencyFormatRp), _buildDivider(), _buildRow('Total PO', '${summary.totalPurchaseOrders} PO'), _buildDivider(), _buildRow('Total Qty', '${summary.totalQuantity} pcs'), _buildDivider(), _buildRow( 'Rata-rata PO', summary.averagePurchaseOrderValue.round().currencyFormatRp, ), _buildDivider(), _buildRow('Item Bahan Baku', '${summary.totalIngredients} item'), _buildDivider(), _buildRow('Vendor', '${summary.totalVendors} vendor'), ], ), ); } Widget _buildRow(String label, String value, {bool isBold = false}) { return Padding( padding: const EdgeInsets.symmetric(vertical: 14), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( label, style: AppStyle.md.copyWith( color: isBold ? AppColor.textPrimary : AppColor.textSecondary, fontWeight: isBold ? FontWeight.w700 : FontWeight.w500, fontSize: 14, ), ), Text( value, style: AppStyle.md.copyWith( color: AppColor.textPrimary, fontWeight: isBold ? FontWeight.w700 : FontWeight.w600, fontSize: 14, ), ), ], ), ); } Widget _buildDivider() { return Divider( height: 1, thickness: 1, color: AppColor.border.withOpacity(0.5), ); } Widget _buildShimmer() { return Container( padding: const EdgeInsets.all(20), decoration: BoxDecoration( color: AppColor.surface, borderRadius: BorderRadius.circular(16), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.04), blurRadius: 10, offset: const Offset(0, 2), ), ], ), child: Shimmer.fromColors( baseColor: Colors.grey[300]!, highlightColor: Colors.grey[100]!, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( width: 140, height: 20, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(4), ), ), const SpaceHeight(20), ...List.generate( 8, (index) => Padding( padding: const EdgeInsets.only(bottom: 16), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( width: 100, height: 14, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(4), ), ), Container( width: 80, height: 14, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(4), ), ), ], ), ), ), ], ), ), ); } }