import 'dart:convert';
import 'package:flutter/foundation.dart';
import '../../../core/auth/auth_store.dart';
import '../../../core/storage/local_storage.dart';
import '../../../core/web/web_office_api.dart';
class CompanyProfile {
const CompanyProfile({
required this.name,
required this.owner,
required this.email,
required this.phone,
required this.address,
required this.taxNumber,
required this.reportFooter,
});
final String name;
final String owner;
final String email;
final String phone;
final String address;
final String taxNumber;
final String reportFooter;
Map<String, String> toJson() => {
'name': name,
'owner': owner,
'email': email,
'phone': phone,
'address': address,
'taxNumber': taxNumber,
'reportFooter': reportFooter,
};
factory CompanyProfile.fromJson(Map<String, dynamic> json) => CompanyProfile(
name: json['name'] as String? ?? '',
owner: json['owner'] as String? ?? '',
email: json['email'] as String? ?? '',
phone: json['phone'] as String? ?? '',
address: json['address'] as String? ?? '',
taxNumber: json['taxNumber'] as String? ?? '',
reportFooter: json['reportFooter'] as String? ?? '',
);
}
class CompanyStore extends ChangeNotifier {
CompanyStore._();
static final instance = CompanyStore._();
static const _legacyKey = 'machweis_company_v1';
static const _tenantKeyPrefix = 'machweis_company_v2_';
static const _emptyProfile = CompanyProfile(
name: '',
owner: '',
email: '',
phone: '',
address: '',
taxNumber: '',
reportFooter: '',
);
static const _demoProfile = CompanyProfile(
name: 'Schneider Elektrotechnik',
owner: 'Max Schneider',
email: 'info@schneider-elektro.de',
phone: '',
address: '',
taxNumber: '',
reportFooter: 'Vielen Dank für Ihren Auftrag.',
);
CompanyProfile profile = const CompanyProfile(
name: 'Schneider Elektrotechnik',
owner: 'Max Schneider',
email: 'info@schneider-elektro.de',
phone: '',
address: '',
taxNumber: '',
reportFooter: 'Vielen Dank für Ihren Auftrag.',
);
Future<void> initialize() async {
profile = _defaultProfile;
if (kIsWeb && AuthStore.instance.session != null) {
try {
profile = CompanyProfile.fromJson(
await WebOfficeApi.instance.companyProfile(),
);
await _persist(profile);
} on Object {
await _loadLocal();
}
notifyListeners();
return;
}
await _loadLocal();
notifyListeners();
}
Future<void> _loadLocal() async {
final stored = await LocalStorage.instance.getString(_storageKey);
if (stored == null) return;
try {
profile = CompanyProfile.fromJson(
jsonDecode(stored) as Map<String, dynamic>,
);
} on FormatException {
await LocalStorage.instance.remove(_storageKey);
}
}
Future<void> save(CompanyProfile value) async {
if (kIsWeb && AuthStore.instance.session != null) {
value = CompanyProfile.fromJson(
await WebOfficeApi.instance.updateCompanyProfile(value.toJson()),
);
}
profile = value;
notifyListeners();
await _persist(value);
}
Future<void> _persist(CompanyProfile value) async {
await LocalStorage.instance.setString(
_storageKey,
jsonEncode(value.toJson()),
);
}
String get _storageKey {
final tenantId = AuthStore.instance.session?.tenantId;
return tenantId == null ? _legacyKey : '$_tenantKeyPrefix$tenantId';
}
CompanyProfile get _defaultProfile =>
AuthStore.instance.session == null ? _demoProfile : _emptyProfile;
}
