import 'package:flutter/material.dart'; import '../models/supplement.dart'; class SupplementCard extends StatelessWidget { final Supplement supplement; final VoidCallback onTake; final VoidCallback onEdit; final VoidCallback onDelete; const SupplementCard({ super.key, required this.supplement, required this.onTake, required this.onEdit, required this.onDelete, }); @override Widget build(BuildContext context) { return Card( margin: const EdgeInsets.only(bottom: 12), elevation: 2, child: Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( supplement.name, style: const TextStyle( fontSize: 18, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 4), Text( '${supplement.numberOfUnits} ${supplement.unitType} (${supplement.dosageAmount} ${supplement.unit} each)', style: TextStyle( fontSize: 14, color: Theme.of(context).colorScheme.onSurfaceVariant, ), ), ], ), ), PopupMenuButton( onSelected: (value) { switch (value) { case 'edit': onEdit(); break; case 'delete': onDelete(); break; } }, itemBuilder: (context) => [ const PopupMenuItem( value: 'edit', child: Row( children: [ Icon(Icons.edit), SizedBox(width: 8), Text('Edit'), ], ), ), const PopupMenuItem( value: 'delete', child: Row( children: [ Icon(Icons.delete, color: Colors.red), SizedBox(width: 8), Text('Delete', style: TextStyle(color: Colors.red)), ], ), ), ], ), ], ), const SizedBox(height: 12), Row( children: [ Icon(Icons.schedule, size: 16, color: Theme.of(context).colorScheme.onSurfaceVariant), const SizedBox(width: 4), Text( '${supplement.frequencyPerDay}x daily', style: TextStyle( fontSize: 12, color: Theme.of(context).colorScheme.onSurfaceVariant, ), ), const SizedBox(width: 16), Icon(Icons.notifications, size: 16, color: Theme.of(context).colorScheme.onSurfaceVariant), const SizedBox(width: 4), Text( supplement.reminderTimes.join(', '), style: TextStyle( fontSize: 12, color: Theme.of(context).colorScheme.onSurfaceVariant, ), ), ], ), if (supplement.notes != null && supplement.notes!.isNotEmpty) ...[ const SizedBox(height: 8), Text( supplement.notes!, style: TextStyle( fontSize: 12, color: Theme.of(context).colorScheme.onSurfaceVariant, fontStyle: FontStyle.italic, ), ), ], const SizedBox(height: 12), // Take supplement section Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: Theme.of(context).colorScheme.surfaceVariant.withOpacity(0.3), borderRadius: BorderRadius.circular(8), border: Border.all( color: Theme.of(context).colorScheme.outline.withOpacity(0.5), ), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Take Supplement', style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, color: Theme.of(context).colorScheme.onSurface, ), ), const SizedBox(height: 8), Row( children: [ Expanded( child: Row( children: [ Text( 'Amount: ', style: TextStyle( fontSize: 12, color: Theme.of(context).colorScheme.onSurfaceVariant, ), ), Text( '${supplement.numberOfUnits} ${supplement.unitType}', style: TextStyle( fontSize: 12, fontWeight: FontWeight.w500, color: Theme.of(context).colorScheme.onSurface, ), ), Text( ' (${supplement.totalDosagePerIntake} ${supplement.unit})', style: TextStyle( fontSize: 10, color: Theme.of(context).colorScheme.onSurfaceVariant, ), ), ], ), ), ElevatedButton.icon( onPressed: onTake, icon: const Icon(Icons.medication, size: 16), label: const Text('Take', style: TextStyle(fontSize: 12)), style: ElevatedButton.styleFrom( backgroundColor: Theme.of(context).colorScheme.primary, foregroundColor: Theme.of(context).colorScheme.onPrimary, minimumSize: const Size(80, 32), padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), ), ), ], ), ], ), ), ], ), ), ); } }