package com.airlock.iam.authentication.domain.model.idpropagation;

import com.airlock.iam.authentication.application.configuration.idpropagation.SsoTicketRolesProviderConfig;
import com.airlock.iam.authentication.domain.model.sso.SsoFlowSessionAttribute;
import com.airlock.iam.base.api.domain.model.plugin.LogicForConfig;
import com.airlock.iam.common.api.domain.model.role.Role;
import com.airlock.iam.common.api.domain.model.user.UserIdentity;
import com.airlock.iam.flow.shared.api.domain.service.FlowAttributeService;
import com.airlock.iam.flow.shared.domain.model.valueprovider.RoleProvider;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Collections;
import java.util.Set;

@LogicForConfig(SsoTicketRolesProviderConfig.class)
public final class SsoTicketRolesProvider implements RoleProvider {
   private final Provider<FlowAttributeService> attributes;

   @Inject
   public SsoTicketRolesProvider(Provider<FlowAttributeService> attributes) {
      this.attributes = attributes;
   }

   @Override
   public Set<Role> provideRoles(UserIdentity userId) {
      return ((FlowAttributeService)this.attributes.get())
         .findAttribute(SsoFlowSessionAttribute.class)
         .map(SsoFlowSessionAttribute::getRoles)
         .orElse(Collections.emptySet());
   }
}
