import 'package:comwell_key_app/domain/models/address.dart';
import 'package:comwell_key_app/domain/models/user.dart';
import 'package:comwell_key_app/services/models/simple_user_dto.dart';
import 'package:comwell_key_app/services/models/user_dto.dart';
extension UserMapper on UserDto {
  User toUser() {
    return User(
      userId: userId,
      hmsId: hmsId ?? "",
      firstName: firstName,
      lastName: lastName,
      email: email,
      emailVerified: emailVerified,
      phoneNumber: phoneNumber,
      address: Address(
        street: addressStreet,
        city: addressCity,
        country: addressCountry,
        zipCode: addressZip,
      ),
      birthDate: birthDate ?? DateTime.now(),
      shopperReference: userId,
      points: points,
      gender: gender ?? "",
      isClubMember: isClubMember,
      createDate: createDate,
      companyId: companyId ?? "",
      companyName: companyName ?? "",
      symplifyId: symplifyId ?? "",
      signUpDate: signUpDate,
      signUpCampaign: signUpCampaign ?? "",
      signUpSource: signUpSource ?? "",
      locale: locale ?? "",
      wasRecentlyCreated: wasRecentlyCreated,
      nationality: nationality ?? "",
    );
  }
}

extension UserDtoMapper on User {
  UserDto toUserDto() {
    return UserDto(
      id: 0,
      userId: userId,
      hmsId: hmsId,
      firstName: firstName,
      lastName: lastName,
      email: email,
      emailVerified: emailVerified,
      isClubMember: isClubMember,
      birthDate: birthDate,
      createDate: createDate,
      companyId: companyId,
      companyName: companyName,
      symplifyId: symplifyId,
      phoneNumber: phoneNumber,
      gender: gender,
      addressStreet: address.street,
      addressZip: address.zipCode,
      addressCity: address.city,
      addressCountry: address.country,
      points: points,
      signUpDate: signUpDate,
      signUpCampaign: signUpCampaign,
      signUpSource: signUpSource,
      locale: null,
      wasRecentlyCreated: wasRecentlyCreated,
      permissions: null,
      // Permissions are not stored in User model
      nationality: nationality,
    );
  }
}

extension SimpleUserDtoMapper on User {
  SimpleUserDto toSimpleUserDto() {
    return SimpleUserDto(
      firstName: firstName,
      lastName: lastName,
      birthDate: birthDate?.toIso8601String(),
      phoneNumber: phoneNumber,
      gender: gender,
      addressStreet: address.street,
      addressZip: address.zipCode,
      addressCity: address.city,
      addressCountry: address.country,
      locale: locale.isNotEmpty ? locale : null,
      permissions: {}, // Permissions are not stored in User model
    );
  }
}