import 'package:comwell_key_app/services/models/user_permissions.dart';
import 'package:json_annotation/json_annotation.dart';

part '../../.generated/services/models/user_dto.g.dart';

@JsonSerializable()
class UserDto {
  final int id;
  final String userId;
  final String? hmsId;
  final String firstName;
  final String lastName;
  final String email;
  final bool emailVerified;
  final bool isClubMember;
  final DateTime? birthDate;
  final DateTime? createDate;
  final String? companyId;
  final String? companyName;
  final String? symplifyId;
  final String phoneNumber;
  final String? gender;
  final String addressStreet;
  final String addressZip;
  final String addressCity;
  final String addressCountry;
  final int points;
  final DateTime? signUpDate;
  final String? signUpCampaign;
  final String? signUpSource;
  final String? locale;
  final bool wasRecentlyCreated;
  final UserPermissions? permissions;
  final String? nationality;

  UserDto({
    required this.id,
    this.userId = '',
    this.hmsId,
    required this.firstName,
    required this.lastName,
    required this.email,
    required this.emailVerified,
    required this.isClubMember,
    this.birthDate,
    this.createDate,
    this.companyId,
    this.companyName,
    this.symplifyId,
    this.phoneNumber = '',
    this.gender,
    this.addressStreet = '',
    this.addressZip = '',
    this.addressCity = '',
    this.addressCountry = '',
    required this.points,
    this.signUpDate,
    this.signUpCampaign,
    this.signUpSource,
    this.locale = '',
    required this.wasRecentlyCreated,
    this.permissions,
    this.nationality,
  });

  factory UserDto.fromJson(Map<String, dynamic> json) =>
      _$UserDtoFromJson(json);

  Map<String, dynamic> toJson() => _$UserDtoToJson(this);
}