package com.airlock.iam.techclientreg.domain.model.flow;

import com.airlock.iam.base.api.domain.model.mapification.MapifiedValues;
import com.airlock.iam.base.domain.model.mapification.MapifiedValuesBuilder;
import com.airlock.iam.common.domain.service.mapification.Mapifier;
import com.airlock.iam.flow.api.domain.model.session.SingleFlowScopedFlowAttribute;
import com.airlock.iam.techclient.domain.model.RegisterableTechnicalClient;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import lombok.NonNull;

public record RegisteringTechClientFlowAttribute(@NonNull RegisterableTechnicalClient client)
   implements SingleFlowScopedFlowAttribute<RegisteringTechClientFlowAttribute> {
   private static final String CLIENT_KEY = "client";

   @SuppressFBWarnings(justification = "generated code")
   public RegisteringTechClientFlowAttribute {
      if (client == null) {
         throw new NullPointerException("client is marked non-null but is null");
      }
   }

   public RegisteringTechClientFlowAttribute mergeWith(RegisteringTechClientFlowAttribute newAttribute) {
      return newAttribute;
   }

   @Override
   public MapifiedValues mapify() {
      return MapifiedValuesBuilder.mapifiedValues().put("client", Mapifier.getInstance().mapify(this.client)).build();
   }

   public static RegisteringTechClientFlowAttribute demapify(MapifiedValues values) {
      return new RegisteringTechClientFlowAttribute(values.demapifyValue("client", Mapifier.getInstance()::demapify));
   }
}
