import 'package:comwell_key_app/utils/json.dart';
import 'package:comwell_key_app/utils/l10n_utils.dart';
import 'package:flutter/material.dart';
import 'package:json_annotation/json_annotation.dart';
part '../../.generated/domain/models/notification_permission.g.dart';
enum NotificationPermissionType {
b2bNewsletter("b2bmarketingnewsletter"),
ccEmail("ccmarketingemail"),
ccDigital("ccmarketingdigi"),
ccSms("ccmarketingsms"),
b2bDigital("b2bmarketingdigi"),
companyEmail("companymarketingemail"),
companyNotifications("companymarketingnewsletter"),
stayEmails("staymarketingemail"),
appNotifications("ccmarketingapp"),
similarProducts("similarproducts");
final String code;
const NotificationPermissionType(this.code);
String localizedDisplayName(BuildContext context) {
switch (this) {
case NotificationPermissionType.b2bNewsletter:
return 'B2B Newsletter';
case NotificationPermissionType.ccEmail:
return 'CC Email Permission';
case NotificationPermissionType.ccDigital:
return 'CC Digital Permission';
case NotificationPermissionType.ccSms:
return 'CC SMS Permission';
case NotificationPermissionType.b2bDigital:
return 'B2B Digital permission';
case NotificationPermissionType.companyEmail:
return 'Company Email permission';
case NotificationPermissionType.companyNotifications:
return 'Comm. Pref: Company Notifications';
case NotificationPermissionType.stayEmails:
return 'Comm. Pref: Stay Emails';
case NotificationPermissionType.appNotifications:
return 'Comm. Pref: App notifications';
case NotificationPermissionType.similarProducts:
return 'Similar products permissions';
}
}
// Not all permissions are used so some of the descriptions are not implemented
String description(BuildContext context) {
switch (this) {
case NotificationPermissionType.b2bNewsletter:
return context.strings.company_deal_subtitle;
case NotificationPermissionType.ccEmail:
return context.strings.email_subtitle;
case NotificationPermissionType.ccDigital:
return context.strings.digital_media_subtitle;
case NotificationPermissionType.ccSms:
return context.strings.sms_subtitle;
case NotificationPermissionType.b2bDigital:
case NotificationPermissionType.companyNotifications:
return context.strings.club_newsletter_subtitle;
case NotificationPermissionType.appNotifications:
return context.strings.push_subtitle;
case NotificationPermissionType.companyEmail:
case NotificationPermissionType.stayEmails:
case NotificationPermissionType.similarProducts:
return '';
}
}
}
@JsonSerializable()
class NotificationPermission {
final String code;
final String displayName;
final NotificationPermissionType? notificationPermissionDescription;
final bool given;
const NotificationPermission({
required this.code,
required this.displayName,
this.notificationPermissionDescription,
required this.given,
});
factory NotificationPermission.fromJson(Json json) => _$NotificationPermissionFromJson(json);
Json toJson() => _$NotificationPermissionToJson(this);
NotificationPermission copyWith({
bool? given,
NotificationPermissionType? notificationPermissionDescription,
}) => NotificationPermission(
code: code,
displayName: displayName,
notificationPermissionDescription: notificationPermissionDescription,
given: given ?? this.given,
);
@override
String toString() {
return 'NotificationPermission{code: $code, displayName: $displayName, given: $given}';
}
}