import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

/// Service for managing blocked phone numbers
class BlockService {
  static const String _blockedNumbersKey = 'blocked_numbers';

  // Private constructor
  BlockService._privateConstructor();

  // Singleton instance
  static final BlockService _instance = BlockService._privateConstructor();

  // Factory constructor to return the same instance
  factory BlockService() {
    return _instance;
  }

  /// Block a phone number
  Future<bool> blockNumber(String phoneNumber) async {
    try {
      final prefs = await SharedPreferences.getInstance();
      final blockedNumbers = prefs.getStringList(_blockedNumbersKey) ?? [];

      // Don't add if already blocked
      if (blockedNumbers.contains(phoneNumber)) {
        return true;
      }

      blockedNumbers.add(phoneNumber);
      return await prefs.setStringList(_blockedNumbersKey, blockedNumbers);
    } catch (e) {
      debugPrint('Error blocking number: $e');
      return false;
    }
  }

  /// Unblock a phone number
  Future<bool> unblockNumber(String phoneNumber) async {
    try {
      final prefs = await SharedPreferences.getInstance();
      final blockedNumbers = prefs.getStringList(_blockedNumbersKey) ?? [];

      if (!blockedNumbers.contains(phoneNumber)) {
        return true;
      }

      blockedNumbers.remove(phoneNumber);
      return await prefs.setStringList(_blockedNumbersKey, blockedNumbers);
    } catch (e) {
      debugPrint('Error unblocking number: $e');
      return false;
    }
  }

  /// Check if a number is blocked
  Future<bool> isNumberBlocked(String phoneNumber) async {
    try {
      final prefs = await SharedPreferences.getInstance();
      final blockedNumbers = prefs.getStringList(_blockedNumbersKey) ?? [];
      return blockedNumbers.contains(phoneNumber);
    } catch (e) {
      debugPrint('Error checking if number is blocked: $e');
      return false;
    }
  }

  /// Get all blocked numbers
  Future<List<String>> getBlockedNumbers() async {
    try {
      final prefs = await SharedPreferences.getInstance();
      return prefs.getStringList(_blockedNumbersKey) ?? [];
    } catch (e) {
      debugPrint('Error getting blocked numbers: $e');
      return [];
    }
  }
}
