import 'package:flutter/material.dart';

class AccountDialogService {
  /// Menampilkan dialog untuk memilih akun sumber (revenue)
  static Future<Map<String, dynamic>?> showSourceAccountDialog(
    BuildContext context,
    List<Map<String, dynamic>> accounts,
  ) async {
    if (accounts.isEmpty) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(
          content: Text(
            'Daftar akun kosong. Pastikan kredensial sudah diatur dan akun telah dimuat. Klik "Muat Ulang Akun" untuk mencoba lagi.')),
      );
      return null;
    }

    // Filter akun sumber (revenue)
    final revenueAccounts =
        accounts.where((account) => account['type'] == 'revenue').toList();

    if (revenueAccounts.isEmpty) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(
          content: Text(
            'Tidak ada akun sumber (revenue) yang ditemukan. Klik "Muat Ulang Akun" untuk mencoba lagi atau periksa akun Anda di Firefly III.')),
      );
      return null;
    }

    return await showDialog<Map<String, dynamic>?>(
      context: context,
      builder: (context) {
        return AlertDialog(
          title: const Text('Pilih Akun Sumber'),
          content: SizedBox(
            width: double.maxFinite,
            child: ListView.builder(
              shrinkWrap: true,
              itemCount: revenueAccounts.length,
              itemBuilder: (context, index) {
                final account = revenueAccounts[index];
                return ListTile(
                  title: Text(account['name']),
                  subtitle: Text(account['type']),
                  onTap: () => Navigator.of(context).pop(account),
                );
              },
            ),
          ),
        );
      },
    );
  }

  /// Menampilkan dialog untuk memilih akun tujuan (asset)
  static Future<Map<String, dynamic>?> showDestinationAccountDialog(
    BuildContext context,
    List<Map<String, dynamic>> accounts,
  ) async {
    if (accounts.isEmpty) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(
          content: Text(
            'Daftar akun kosong. Pastikan kredensial sudah diatur dan akun telah dimuat. Klik "Muat Ulang Akun" untuk mencoba lagi.')),
      );
      return null;
    }

    // Filter akun tujuan (asset)
    final assetAccounts =
        accounts.where((account) => account['type'] == 'asset').toList();

    if (assetAccounts.isEmpty) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(
          content: Text(
            'Tidak ada akun tujuan (asset) yang ditemukan. Klik "Muat Ulang Akun" untuk mencoba lagi atau periksa akun Anda di Firefly III.')),
      );
      return null;
    }

    return await showDialog<Map<String, dynamic>?>(
      context: context,
      builder: (context) {
        return AlertDialog(
          title: const Text('Pilih Akun Tujuan'),
          content: SizedBox(
            width: double.maxFinite,
            child: ListView.builder(
              shrinkWrap: true,
              itemCount: assetAccounts.length,
              itemBuilder: (context, index) {
                final account = assetAccounts[index];
                return ListTile(
                  title: Text(account['name']),
                  subtitle: Text(account['type']),
                  onTap: () => Navigator.of(context).pop(account),
                );
              },
            ),
          ),
        );
      },
    );
  }
}