import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';

class ChatReadSettings {
  final bool readOnAction; // Чтение при отправке сообщения
  final bool readOnEnter; // Чтение при входе в чат
  final bool disabled; // Отключено чтение вообще

  ChatReadSettings({
    this.readOnAction = true,
    this.readOnEnter = true,
    this.disabled = false,
  });

  Map<String, dynamic> toJson() {
    return {
      'readOnAction': readOnAction,
      'readOnEnter': readOnEnter,
      'disabled': disabled,
    };
  }

  factory ChatReadSettings.fromJson(Map<String, dynamic> json) {
    return ChatReadSettings(
      readOnAction: json['readOnAction'] ?? true,
      readOnEnter: json['readOnEnter'] ?? true,
      disabled: json['disabled'] ?? false,
    );
  }

  ChatReadSettings copyWith({
    bool? readOnAction,
    bool? readOnEnter,
    bool? disabled,
  }) {
    return ChatReadSettings(
      readOnAction: readOnAction ?? this.readOnAction,
      readOnEnter: readOnEnter ?? this.readOnEnter,
      disabled: disabled ?? this.disabled,
    );
  }
}

class ChatReadSettingsService {
  static final ChatReadSettingsService instance = ChatReadSettingsService._();
  ChatReadSettingsService._();

  static const String _prefix = 'chat_read_settings_';

  Future<bool> hasCustomSettings(int chatId) async {
    try {
      final prefs = await SharedPreferences.getInstance();
      final key = '$_prefix$chatId';
      return prefs.containsKey(key);
    } catch (e) {
      return false;
    }
  }

  /// Получить настройки чтения для чата
  /// Если настроек нет, возвращает null (значит использовать глобальные)
  Future<ChatReadSettings?> getSettings(int chatId) async {
    try {
      final prefs = await SharedPreferences.getInstance();
      final key = '$_prefix$chatId';
      final jsonString = prefs.getString(key);

      if (jsonString == null) {
        return null;
      }

      final json = jsonDecode(jsonString) as Map<String, dynamic>;
      return ChatReadSettings.fromJson(json);
    } catch (e) {
      print('Ошибка загрузки настроек чтения для чата $chatId: $e');
      return null;
    }
  }

  /// Сохранить настройки чтения для чата
  Future<void> saveSettings(int chatId, ChatReadSettings settings) async {
    try {
      final prefs = await SharedPreferences.getInstance();
      final key = '$_prefix$chatId';
      final jsonString = jsonEncode(settings.toJson());
      await prefs.setString(key, jsonString);
    } catch (e) {
      print('Ошибка сохранения настроек чтения для чата $chatId: $e');
    }
  }

  /// Удалить настройки для чата (вернуть к значениям по умолчанию)
  Future<void> resetSettings(int chatId) async {
    try {
      final prefs = await SharedPreferences.getInstance();
      final key = '$_prefix$chatId';
      await prefs.remove(key);
    } catch (e) {
      print('Ошибка сброса настроек чтения для чата $chatId: $e');
    }
  }
}
