import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'account_mirror_service.dart'; import '../models/firefly_account.dart'; class AccountDialogService { /// Menampilkan dialog untuk memilih akun sumber (revenue) dengan akses ke semua akun yang di-mirror static Future?> showSourceAccountDialog( BuildContext context, List> accounts, ) async { // Ambil semua akun revenue yang telah di-mirror final mirroredRevenueAccounts = await AccountMirrorService.getMirroredAccountsByType('revenue'); // Jika tidak ada akun yang di-mirror, coba dari parameter accounts List availableAccounts = mirroredRevenueAccounts; if (availableAccounts.isEmpty && accounts.isNotEmpty) { // Konversi dari Map ke FireflyAccount availableAccounts = accounts .where((account) => (account['attributes'] as Map?)?['type'] == 'revenue' || account['type'] == 'revenue') .map((account) => FireflyAccount( id: account['id'].toString(), name: (account['attributes'] as Map?)?['name'] ?.toString() ?? account['name']?.toString() ?? '', type: (account['attributes'] as Map?)?['type'] ?.toString() ?? account['type']?.toString() ?? '', )) .toList(); } if (availableAccounts.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text( 'Tidak ada akun sumber (revenue) yang tersedia. Pastikan akun telah disinkronkan dari server Firefly III.')), ); return null; } return await showDialog?>( context: context, builder: (context) { return AlertDialog( title: const Text('Pilih Akun Sumber'), content: SizedBox( width: double.maxFinite, child: Column( mainAxisSize: MainAxisSize.min, children: [ // Tidak lagi menampilkan default account karena fitur telah dihapus const SizedBox(height: 8), // List akun yang tersedia SizedBox( height: 300, child: ListView.builder( shrinkWrap: true, itemCount: availableAccounts.length, itemBuilder: (context, index) { final account = availableAccounts[index]; return ListTile( title: Text(account.name), subtitle: Text('ID: ${account.id}'), onTap: () { // Simpan sebagai default account _saveDefaultAccountId( 'source', account.id, account.name); final accountAsMap = { 'id': account.id, 'name': account.name, 'type': account.type, }; Navigator.of(context).pop(accountAsMap); }, ); }, ), ), ], ), ), ); }, ); } /// Menampilkan dialog untuk memilih akun tujuan (asset) dengan akses ke semua akun yang di-mirror static Future?> showDestinationAccountDialog( BuildContext context, List> accounts, ) async { // Ambil semua akun asset yang telah di-mirror final mirroredAssetAccounts = await AccountMirrorService.getMirroredAccountsByType('asset'); // Jika tidak ada akun yang di-mirror, coba dari parameter accounts List availableAccounts = mirroredAssetAccounts; if (availableAccounts.isEmpty && accounts.isNotEmpty) { // Konversi dari Map ke FireflyAccount availableAccounts = accounts .where((account) => (account['attributes'] as Map?)?['type'] == 'asset' || account['type'] == 'asset') .map((account) => FireflyAccount( id: account['id'].toString(), name: (account['attributes'] as Map?)?['name'] ?.toString() ?? account['name']?.toString() ?? '', type: (account['attributes'] as Map?)?['type'] ?.toString() ?? account['type']?.toString() ?? '', )) .toList(); } if (availableAccounts.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text( 'Tidak ada akun tujuan (asset) yang tersedia. Pastikan akun telah disinkronkan dari server Firefly III.')), ); return null; } // Tidak lagi menggunakan default account karena fitur telah dihapus return await showDialog?>( context: context, builder: (context) { return AlertDialog( title: const Text('Pilih Akun Tujuan'), content: SizedBox( width: double.maxFinite, child: Column( mainAxisSize: MainAxisSize.min, children: [ // Tidak menampilkan default account karena fitur telah dihapus const SizedBox(height: 8), // List akun yang tersedia SizedBox( height: 300, child: ListView.builder( shrinkWrap: true, itemCount: availableAccounts.length, itemBuilder: (context, index) { final account = availableAccounts[index]; return ListTile( title: Text(account.name), subtitle: Text('ID: ${account.id}'), onTap: () { // Tidak lagi menyimpan default account mapping final accountAsMap = { 'id': account.id, 'name': account.name, 'type': account.type, }; Navigator.of(context).pop(accountAsMap); }, ); }, ), ), ], ), ), ); }, ); } // Fungsi bantu untuk menyimpan default account ID static Future _saveDefaultAccountId( String type, String id, String name) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString('default_${type}_account_id', id); await prefs.setString('default_${type}_account_name', name); } // Fungsi bantu untuk mendapatkan default account ID static Future _getDefaultAccountId(String type) async { final prefs = await SharedPreferences.getInstance(); return prefs.getString('default_${type}_account_id'); } }