import 'package:enaklo_pos/core/extensions/int_ext.dart'; import 'package:enaklo_pos/data/models/response/order_response_model.dart'; import 'package:flutter/material.dart'; class ConfirmVoidDialog extends StatelessWidget { final String message; final String voidType; final Order order; final Map selectedItemQuantities; final String voidReason; final Function() onTap; const ConfirmVoidDialog( {super.key, required this.message, required this.voidType, required this.order, required this.selectedItemQuantities, required this.voidReason, required this.onTap}); @override Widget build(BuildContext context) { return Dialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), ), elevation: 8, child: Container( width: MediaQuery.of(context).size.width * 0.9, constraints: BoxConstraints( maxWidth: 600, maxHeight: MediaQuery.of(context).size.height * 0.8, ), child: Column( mainAxisSize: MainAxisSize.min, children: [ // Header Container( width: double.infinity, padding: EdgeInsets.all(20), decoration: BoxDecoration( gradient: LinearGradient( colors: [Colors.red[400]!, Colors.red[600]!], begin: Alignment.topLeft, end: Alignment.bottomRight, ), borderRadius: BorderRadius.only( topLeft: Radius.circular(16), topRight: Radius.circular(16), ), ), child: Column( children: [ Container( width: 50, height: 50, decoration: BoxDecoration( color: Colors.white.withOpacity(0.2), shape: BoxShape.circle, ), child: Icon( Icons.warning_rounded, color: Colors.white, size: 28, ), ), SizedBox(height: 12), Text( 'Konfirmasi Void', style: TextStyle( color: Colors.white, fontSize: 20, fontWeight: FontWeight.bold, ), ), Text( 'Tindakan ini tidak dapat dibatalkan', style: TextStyle( color: Colors.white.withOpacity(0.9), fontSize: 12, ), ), ], ), ), // Scrollable Content Flexible( child: SingleChildScrollView( padding: EdgeInsets.all(20), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Main message Container( width: double.infinity, padding: EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.grey[50], borderRadius: BorderRadius.circular(12), border: Border.all(color: Colors.grey[200]!), ), child: Text( message, style: TextStyle( fontSize: 14, height: 1.4, color: Colors.grey[800], ), ), ), if (voidType == 'item' && selectedItemQuantities.isNotEmpty) ...[ SizedBox(height: 16), // Items section Container( width: double.infinity, decoration: BoxDecoration( color: Colors.orange[50], borderRadius: BorderRadius.circular(12), border: Border.all(color: Colors.orange[200]!), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: EdgeInsets.all(16), child: Row( children: [ Container( padding: EdgeInsets.all(6), decoration: BoxDecoration( color: Colors.orange[100], borderRadius: BorderRadius.circular(6), ), child: Icon( Icons.list_alt_rounded, color: Colors.orange[700], size: 16, ), ), SizedBox(width: 8), Text( 'Item yang akan divoid:', style: TextStyle( fontWeight: FontWeight.bold, fontSize: 14, color: Colors.orange[800], ), ), ], ), ), Container( constraints: BoxConstraints(maxHeight: 120), child: Scrollbar( child: SingleChildScrollView( padding: EdgeInsets.only( left: 16, right: 16, bottom: 16), child: Column( children: selectedItemQuantities.entries .map((entry) { final item = order.orderItems!.firstWhere( (item) => item.id == entry.key); return Container( margin: EdgeInsets.only(bottom: 6), padding: EdgeInsets.all(10), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(6), boxShadow: [ BoxShadow( color: Colors.black .withOpacity(0.03), blurRadius: 2, offset: Offset(0, 1), ), ], ), child: Row( children: [ Container( width: 6, height: 6, decoration: BoxDecoration( color: Colors.red[400], shape: BoxShape.circle, ), ), SizedBox(width: 8), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( item.productName ?? 'Unknown Product', style: TextStyle( fontWeight: FontWeight.w600, fontSize: 12, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), Text( '${entry.value} qty', style: TextStyle( fontSize: 10, color: Colors.grey[600], ), ), ], ), ), Container( padding: EdgeInsets.symmetric( horizontal: 6, vertical: 2), decoration: BoxDecoration( color: Colors.red[100], borderRadius: BorderRadius.circular(4), ), child: Text( ((item.unitPrice ?? 0) * entry.value) .currencyFormatRpV2, style: TextStyle( fontSize: 10, fontWeight: FontWeight.bold, color: Colors.red[700], ), ), ), ], ), ); }).toList(), ), ), ), ), ], ), ), ], SizedBox(height: 16), // Reason section Container( width: double.infinity, padding: EdgeInsets.all(12), decoration: BoxDecoration( color: Colors.blue[50], borderRadius: BorderRadius.circular(8), border: Border.all(color: Colors.blue[200]!), ), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: EdgeInsets.all(6), decoration: BoxDecoration( color: Colors.blue[100], borderRadius: BorderRadius.circular(6), ), child: Icon( Icons.note_alt_rounded, color: Colors.blue[700], size: 16, ), ), SizedBox(width: 8), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Alasan:', style: TextStyle( fontWeight: FontWeight.w600, color: Colors.blue[800], fontSize: 12, ), ), SizedBox(height: 2), Text( voidReason, style: TextStyle( fontStyle: FontStyle.italic, color: Colors.blue[700], fontSize: 12, ), ), ], ), ), ], ), ), ], ), ), ), // Action buttons Container( padding: EdgeInsets.all(20), decoration: BoxDecoration( color: Colors.grey[50], borderRadius: BorderRadius.only( bottomLeft: Radius.circular(16), bottomRight: Radius.circular(16), ), ), child: Row( children: [ Expanded( child: Container( height: 44, child: ElevatedButton( onPressed: () => Navigator.pop(context), style: ElevatedButton.styleFrom( backgroundColor: Colors.grey[300], foregroundColor: Colors.grey[700], elevation: 0, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.close_rounded, size: 18), SizedBox(width: 6), Text( 'Batal', style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, ), ), ], ), ), ), ), SizedBox(width: 12), Expanded( child: Container( height: 44, child: ElevatedButton( onPressed: () { Navigator.pop(context); onTap(); }, style: ElevatedButton.styleFrom( backgroundColor: Colors.red[600], foregroundColor: Colors.white, elevation: 2, shadowColor: Colors.red.withOpacity(0.3), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8), ), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.delete_forever_rounded, size: 18), SizedBox(width: 6), Text( voidType == 'all' ? 'Void Pesanan' : 'Void Item', style: TextStyle( fontSize: 14, fontWeight: FontWeight.bold, ), ), ], ), ), ), ), ], ), ), ], ), ), ); } }