package com.airlock.iam.flow.shared.domain.model.newdevice;

import com.airlock.iam.base.api.domain.model.user.UserId;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.time.Instant;
import java.util.Comparator;
import lombok.NonNull;

public record LoginFromNewDeviceUser(@NonNull UserId userId, @NonNull LoginFromNewDeviceUserInfo userInfo) {
   @SuppressFBWarnings(justification = "generated code")
   public LoginFromNewDeviceUser {
      if (userId == null) {
         throw new NullPointerException("userId is marked non-null but is null");
      }

      if (userInfo == null) {
         throw new NullPointerException("userInfo is marked non-null but is null");
      }
   }

   public static LoginFromNewDeviceUser of(UserId userId, LoginFromNewDeviceCreatedAt created, LoginFromNewDeviceRenewedAt renewed) {
      return new LoginFromNewDeviceUser(userId, new LoginFromNewDeviceUserInfo(created, renewed));
   }

   public static Comparator<LoginFromNewDeviceUser> latestRenewedFirst() {
      return Comparator.<LoginFromNewDeviceUser, Instant>comparing(user -> user.userInfo().renewedAt().instant()).reversed();
   }
}
