package com.airlock.iam.common.infrastructure.factory;

import com.airlock.iam.common.infrastructure.logger.RestHelpdeskLogger;
import com.airlock.iam.log.api.helpdesk.HelpdeskLogger;
import com.airlock.iam.log.processor.LogMessageProcessor;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import jakarta.ws.rs.core.SecurityContext;
import java.security.Principal;
import org.glassfish.hk2.api.Factory;

public class HelpdeskLoggerFactory implements Factory<HelpdeskLogger> {
   private final SecurityContext securityContext;
   private final Provider<LogMessageProcessor> logMessageProcessor;

   @Inject
   public HelpdeskLoggerFactory(SecurityContext securityContext, Provider<LogMessageProcessor> logMessageProcessor) {
      this.securityContext = securityContext;
      this.logMessageProcessor = logMessageProcessor;
   }

   public void dispose(HelpdeskLogger arg0) {
   }

   public HelpdeskLogger provide() {
      return new RestHelpdeskLogger(() -> getAuthentee(this.securityContext), this.logMessageProcessor);
   }

   private static String getAuthentee(SecurityContext securityContext) {
      Principal userPrincipal = securityContext.getUserPrincipal();
      return userPrincipal != null ? userPrincipal.getName() : "unknown";
   }
}
