package com.airlock.iam.flow.shared.infrastructure.service.newdevice;

import com.airlock.iam.flow.shared.domain.model.newdevice.LoginFromNewDeviceUserAgent;
import com.airlock.iam.flow.shared.domain.service.newdevice.LoginFromNewDeviceUserAgentParser;
import jakarta.inject.Inject;
import java.util.Optional;
import ua_parser.Client;
import ua_parser.Parser;

public class LoginFromNewDeviceUserAgentParserImpl implements LoginFromNewDeviceUserAgentParser {
   private final Parser uaParser = new Parser();

   @Override
   public Optional<LoginFromNewDeviceUserAgent> parse(String rawUserAgent) {
      Client client = this.uaParser.parse(rawUserAgent);
      return Optional.ofNullable(client)
         .map(
            c -> new LoginFromNewDeviceUserAgent(
               Optional.ofNullable(c.userAgent).flatMap(userAgent -> Optional.ofNullable(userAgent.family)),
               Optional.ofNullable(c.os).flatMap(os -> Optional.ofNullable(os.family)),
               Optional.ofNullable(c.device).flatMap(device -> Optional.ofNullable(device.family))
            )
         );
   }
}
