package com.airlock.iam.authentication.domain.service.newdevice;

import com.airlock.iam.base.api.domain.model.user.UserId;
import com.airlock.iam.base.misc.time.TimeProvider;
import com.airlock.iam.flow.shared.domain.model.newdevice.LoginFromNewDeviceKnownUsers;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.time.Instant;

public final class LoginFromNewDeviceKnownUsersWriter {
   private final Provider<TimeProvider> time;
   private final Provider<LoginFromNewDeviceResponse> response;

   @Inject
   public LoginFromNewDeviceKnownUsersWriter(Provider<TimeProvider> time, Provider<LoginFromNewDeviceResponse> response) {
      this.time = time;
      this.response = response;
   }

   public void updateKnownUsers(LoginFromNewDeviceKnownUsers knownUsers, UserId userId) {
      LoginFromNewDeviceKnownUsers updatedKnownUsers = knownUsers.forUserSeenAt(userId, this.now());
      ((LoginFromNewDeviceResponse)this.response.get()).setKnownUsers(updatedKnownUsers);
   }

   private Instant now() {
      return ((TimeProvider)this.time.get()).getCurrentInstant();
   }
}
