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

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.time.Instant;
import lombok.NonNull;

public record LoginFromNewDeviceUserInfo(@NonNull LoginFromNewDeviceCreatedAt createdAt, @NonNull LoginFromNewDeviceRenewedAt renewedAt) {
   @SuppressFBWarnings(justification = "generated code")
   public LoginFromNewDeviceUserInfo {
      if (createdAt == null) {
         throw new NullPointerException("createdAt is marked non-null but is null");
      }

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

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

   public boolean isValid(LoginFromNewDeviceValidity validity, Instant now) {
      Instant validUntil = this.renewedAt.instant().plus(validity.duration());
      return validUntil.isAfter(now);
   }
}
