import 'dart:io';

void main() {
  List<Map<String, double>> incomeList = [];
  List<Map<String, double>> expenseList = [];

  while (true) {
    print('\n=== Budget Management Application ===');
    print('1. Add Income');
    print('2. Add Expense');
    print('3. View Summary');
    print('4. Exit');
    stdout.write('Enter your choice: ');
    String? choice = stdin.readLineSync();

    if (choice == null) continue;

    if (choice == '1') {
      stdout.write('Enter income description: ');
      String? desc = stdin.readLineSync();
      stdout.write('Enter income amount: ');
      String? amt = stdin.readLineSync();

      double? amount = double.tryParse(amt ?? '');
      if (amount != null && amount >= 0) {
        incomeList.add({desc ?? "Unnamed Income": amount});
        print('✅ Income added successfully!');
      } else {
        print('❌ Invalid amount. Please enter a positive number.');
      }

    } else if (choice == '2') {
      stdout.write('Enter expense description: ');
      String? desc = stdin.readLineSync();
      stdout.write('Enter expense amount: ');
      String? amt = stdin.readLineSync();

      double? amount = double.tryParse(amt ?? '');
      if (amount != null && amount >= 0) {
        expenseList.add({desc ?? "Unnamed Expense": amount});
        print('✅ Expense added successfully!');
      } else {
        print('❌ Invalid amount. Please enter a positive number.');
      }

    } else if (choice == '3') {
      double totalIncome = 0;
      double totalExpenses = 0;

      for (var entry in incomeList) {
        totalIncome += entry.values.first;
      }

      for (var entry in expenseList) {
        totalExpenses += entry.values.first;
      }

      double net = totalIncome - totalExpenses;

      print('\n--- Budget Summary ---');
      print('Total Income: \$\${totalIncome.toStringAsFixed(2)}');
      print('Total Expenses: \$\${totalExpenses.toStringAsFixed(2)}');

      if (net > 0) {
        print('Your net profit is \$\${net.toStringAsFixed(2)}');
        double tax = net * 0.15;
        print('Tax to be paid (15%): \$\${tax.toStringAsFixed(2)}');
      } else if (net < 0) {
        print('Your net loss is \$\${net.abs().toStringAsFixed(2)}');
      } else {
        print('You broke even this month.');
      }

    } else if (choice == '4') {
      print('Exiting Budget Management... Goodbye!');
      break;
    } else {
      print('❌ Invalid choice. Please try again.');
    }
  }
}
