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

class BlockedNumbersPage extends StatefulWidget {
  const BlockedNumbersPage({super.key});

  @override
  _BlockedNumbersPageState createState() => _BlockedNumbersPageState();
}

class _BlockedNumbersPageState extends State<BlockedNumbersPage> {
  bool _blockUnknownNumbers = false; // Toggle for blocking unknown numbers
  List<String> _blockedNumbers = []; // List of blocked numbers
  final TextEditingController _numberController = TextEditingController();

  @override
  void initState() {
    super.initState();
    _loadPreferences(); // Load data on initialization
  }

  // Load preferences from local storage
  Future<void> _loadPreferences() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      _blockUnknownNumbers = prefs.getBool('blockUnknownNumbers') ?? false;
      _blockedNumbers = prefs.getStringList('blockedNumbers') ?? [];
    });
  }

  // Save preferences to local storage
  Future<void> _savePreferences() async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setBool('blockUnknownNumbers', _blockUnknownNumbers);
    await prefs.setStringList('blockedNumbers', _blockedNumbers);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.black,
      appBar: AppBar(
        title: const Text('Blocked Numbers'),
      ),
      body: ListView(
        padding: const EdgeInsets.all(16),
        children: [
          SwitchListTile(
            title: const Text(
              'Block Unknown Numbers',
              style: TextStyle(color: Colors.white),
            ),
            value: _blockUnknownNumbers,
            onChanged: (bool value) {
              setState(() {
                _blockUnknownNumbers = value;
                _savePreferences(); // Save the state to local storage
              });
            },
          ),
          const SizedBox(height: 16),
          ListTile(
            title: const Text(
              'Blocked Numbers',
              style: TextStyle(color: Colors.white, fontSize: 18, fontWeight: FontWeight.bold),
            ),
            subtitle: _blockedNumbers.isEmpty
                ? const Text(
                    'No blocked numbers',
                    style: TextStyle(color: Colors.grey),
                  )
                : null,
          ),
          ..._blockedNumbers.map(
            (number) => ListTile(
              title: Text(
                number,
                style: const TextStyle(color: Colors.white),
              ),
              trailing: IconButton(
                icon: const Icon(Icons.delete, color: Colors.red),
                onPressed: () => _unblockNumber(number),
              ),
            ),
          ),
          const Divider(color: Colors.grey),
          ListTile(
            title: const Text(
              'Block a Number',
              style: TextStyle(color: Colors.white),
            ),
            trailing: const Icon(Icons.add, color: Colors.white),
            onTap: () => _showBlockNumberDialog(),
          ),
        ],
      ),
    );
  }

  // Function to block a number
  void _blockNumber(String number) {
    if (number.isNotEmpty && !_blockedNumbers.contains(number)) {
      setState(() {
        _blockedNumbers.add(number);
        _savePreferences(); // Save the updated list
      });
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('$number has been blocked')),
      );
    }
  }

  // Function to unblock a number
  void _unblockNumber(String number) {
    setState(() {
      _blockedNumbers.remove(number);
      _savePreferences(); // Save the updated list
    });
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('$number has been unblocked')),
    );
  }

  // Dialog for blocking a new number
  void _showBlockNumberDialog() {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          backgroundColor: Colors.grey[900],
          title: const Text('Block a Number', style: TextStyle(color: Colors.white)),
          content: TextField(
            controller: _numberController,
            keyboardType: TextInputType.phone,
            decoration: const InputDecoration(
              hintText: 'Enter number',
              hintStyle: TextStyle(color: Colors.grey),
            ),
            style: const TextStyle(color: Colors.white),
          ),
          actions: [
            TextButton(
              onPressed: () {
                Navigator.pop(context);
              },
              child: const Text('Cancel', style: TextStyle(color: Colors.white)),
            ),
            TextButton(
              onPressed: () {
                _blockNumber(_numberController.text);
                _numberController.clear();
                Navigator.pop(context);
              },
              child: const Text('Block', style: TextStyle(color: Colors.red)),
            ),
          ],
        );
      },
    );
  }

  @override
  void dispose() {
    _numberController.dispose();
    super.dispose();
  }
}