package com.airlock.iam.common.domain.model.user;

import com.airlock.iam.common.api.domain.model.contextdata.ContextData;
import com.airlock.iam.common.api.domain.model.role.Role;
import com.airlock.iam.common.api.domain.model.user.User;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Set;
import lombok.NonNull;

public final class UserImpl implements User {
   @NonNull
   private final String name;
   @NonNull
   private ContextData contextData;
   @NonNull
   private final Set<Role> roles;

   @Override
   public boolean hasName() {
      return true;
   }

   @SuppressFBWarnings(justification = "generated code")
   public UserImpl(@NonNull String name, @NonNull ContextData contextData, @NonNull Set<Role> roles) {
      if (name == null) {
         throw new NullPointerException("name is marked non-null but is null");
      }

      if (contextData == null) {
         throw new NullPointerException("contextData is marked non-null but is null");
      }

      if (roles == null) {
         throw new NullPointerException("roles is marked non-null but is null");
      }

      this.name = name;
      this.contextData = contextData;
      this.roles = roles;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   @Override
   public String getName() {
      return this.name;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   @Override
   public ContextData getContextData() {
      return this.contextData;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   @Override
   public Set<Role> getRoles() {
      return this.roles;
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public void setContextData(@NonNull ContextData contextData) {
      if (contextData == null) {
         throw new NullPointerException("contextData is marked non-null but is null");
      }

      this.contextData = contextData;
   }
}
