package com.airlock.iam.apipolicyservice.infrastructure.repository;

import com.airlock.iam.apipolicyservice.domain.model.ApiPolicyServiceTechClientView;
import com.airlock.iam.core.domain.service.jwt.JwtHmacAndAesGcmEncryption;
import com.airlock.iam.database.infrastructure.generated.schema.tables.PlanUsageTable;
import com.airlock.iam.database.infrastructure.generated.schema.tables.PrincipalTable;
import java.util.Map;
import java.util.function.BiConsumer;
import org.apache.commons.lang3.StringUtils;
import org.jooq.Record;

final class CollectClients implements BiConsumer<Map<Integer, ApiPolicyServiceTechClientView.ApiPolicyServiceTechClientViewBuilder>, Record> {
   private final PersistencyToApiPolicyServiceTechClientMapper persistencyToApiPolicyTechClientMapper;

   CollectClients(JwtHmacAndAesGcmEncryption macAndEncrypter) {
      this.persistencyToApiPolicyTechClientMapper = new PersistencyToApiPolicyServiceTechClientMapper(macAndEncrypter);
   }

   public void accept(Map<Integer, ApiPolicyServiceTechClientView.ApiPolicyServiceTechClientViewBuilder> map, Record record) {
      int principalId = (Integer)record.get(PrincipalTable.PRINCIPAL.PK);
      ApiPolicyServiceTechClientView.ApiPolicyServiceTechClientViewBuilder clientBuilder = map.get(principalId);
      if (clientBuilder == null) {
         clientBuilder = this.persistencyToApiPolicyTechClientMapper.mapToClientBuilderAndSubscription(record);
      }

      if (StringUtils.isNotEmpty((CharSequence)record.get(PlanUsageTable.PLAN_USAGE.NAME))) {
         clientBuilder.getSubscriptionBuilder().plan(this.persistencyToApiPolicyTechClientMapper.mapToPlanUsage(record));
      }

      map.put(principalId, clientBuilder);
   }
}
