import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:get/get.dart';
import 'package:firebase_auth/firebase_auth.dart';

class PelangganController extends GetxController {
  final FirebaseFirestore _firestore = FirebaseFirestore.instance;
  final FirebaseAuth _auth = FirebaseAuth.instance;

  var isLoading = true.obs;
  var pelangganList = <Map<String, dynamic>>[].obs;
  var totalPelanggan = 0.obs;

  @override
  void onInit() {
    super.onInit();
    fetchAllPelanggan();
  }

  /// Ambil data pelanggan berdasarkan user yang login
  Future<void> fetchAllPelanggan() async {
    try {
      isLoading.value = true;

      final user = _auth.currentUser;
      if (user == null) {
        Get.snackbar("Error", "User belum login");
        return;
      }

      final userId = user.uid;

      // Ambil semua resi yang dibuat oleh user yang login
      final snapshot = await _firestore
          .collection('resis')
          .where('store_id', isEqualTo: userId)
          .get();

      // Mengelompokkan data berdasarkan nama penerima
      final Map<String, Map<String, dynamic>> pelangganMap = {};

      for (var doc in snapshot.docs) {
        final data = doc.data();

        final nama = (data['penerima'] ?? '').toString();
        if (nama.isEmpty) continue;

        if (!pelangganMap.containsKey(nama)) {
          pelangganMap[nama] = {
            'penerima': nama,
            'no_wa': data['no_wa'] ?? '-',
            'alamat': data['alamat'] ?? '-',
            'kota': data['kota'] ?? '-',
            'provinsi': data['provinsi'] ?? '-',
            'barang': data['barang'] ?? '-', // 🔹 Ganti totalTransaksi → barang
            'totalNominal':
                double.tryParse(data['total']?.toString() ?? '0') ?? 0.0,
            'created_at': (data['created_at'] is Timestamp)
                ? (data['created_at'] as Timestamp).toDate()
                : DateTime.now(), // 🔹 Tambahan untuk tanggal pembuatan
          };
        } else {
          // Jika nama pelanggan sama, tambahkan nominal tapi barang tidak berubah
          pelangganMap[nama]!['totalNominal'] +=
              double.tryParse(data['total']?.toString() ?? '0') ?? 0.0;
        }
      }

      pelangganList.assignAll(pelangganMap.values.toList());
      totalPelanggan.value = pelangganList.length;
    } catch (e) {
      Get.snackbar("Error", "Gagal memuat data pelanggan: $e");
    } finally {
      isLoading.value = false;
    }
  }
}
