import 'dart:convert';
import 'package:flutter/foundation.dart';
import '../storage/local_storage.dart';
enum AiProvider {
openAi('OpenAI'),
gemini('Google Gemini');
const AiProvider(this.label);
final String label;
}
class AiSettings {
const AiSettings({
this.enabled = false,
this.provider = AiProvider.openAi,
this.openAiModel = 'gpt-5.6-luna',
this.geminiModel = 'gemini-3.6-flash',
this.proxyUrl = '',
});
final bool enabled;
final AiProvider provider;
final String openAiModel;
final String geminiModel;
final String proxyUrl;
String get activeModel =>
provider == AiProvider.openAi ? openAiModel : geminiModel;
bool get usesProxy => proxyUrl.trim().isNotEmpty;
Map<String, Object?> toJson() => {
'enabled': enabled,
'provider': provider.name,
'openAiModel': openAiModel,
'geminiModel': geminiModel,
'proxyUrl': proxyUrl,
};
factory AiSettings.fromJson(Map<String, dynamic> json) => AiSettings(
enabled: json['enabled'] as bool? ?? false,
provider: AiProvider.values.firstWhere(
(value) => value.name == json['provider'],
orElse: () => AiProvider.openAi,
),
openAiModel: json['openAiModel'] as String? ?? 'gpt-5.6-luna',
geminiModel: json['geminiModel'] as String? ?? 'gemini-3.6-flash',
proxyUrl: json['proxyUrl'] as String? ?? '',
);
}
class AiSettingsStore extends ChangeNotifier {
AiSettingsStore._();
static final instance = AiSettingsStore._();
static const _settingsKey = 'machweis_ai_settings_v1';
AiSettings settings = const AiSettings();
Future<void> initialize() async {
final stored = await LocalStorage.instance.getString(_settingsKey);
if (stored == null) return;
try {
settings = AiSettings.fromJson(
jsonDecode(stored) as Map<String, dynamic>,
);
} on Object {
await LocalStorage.instance.remove(_settingsKey);
}
}
Future<void> save(AiSettings value) async {
settings = value;
await LocalStorage.instance.setString(
_settingsKey,
jsonEncode(value.toJson()),
);
notifyListeners();
}
}
