package com.l7tech.external.assertions.gatewaygraphql.server.data;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIncludeProperties;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.l7tech.objectmodel.Alias;
import com.l7tech.objectmodel.NamedEntity;
import com.l7tech.objectmodel.PersistentEntity;

public abstract class L7EntityAliasDTO<T extends Alias<AT>, AT extends PersistentEntity> extends EntityDTO<T> {
   protected final AT aliasedEntity;

   public L7EntityAliasDTO(T var1, AT var2) {
      super((T)var1);
      this.aliasedEntity = (AT)var2;
   }

   @Override
   public String getName() {
      return this.aliasedEntity instanceof NamedEntity ? ((NamedEntity)this.aliasedEntity).getName() : this.entity.getId();
   }

   public String getFolderPath() {
      return this.entity.getFolder().getPath();
   }

   @JsonIgnore
   public AT getAliasedEntity() {
      return this.aliasedEntity;
   }

   @Override
   protected Object createWrapperObject() {
      return new L7EntityAliasDTO.L7EntityAliasWrapper(this.entity, this.aliasedEntity);
   }

   @JsonIncludeProperties({"name", "folderPath"})
   @JsonPropertyOrder({"name", "folderPath"})
   public static class L7EntityAliasWrapper<T extends Alias<AT>, AT extends PersistentEntity> extends L7EntityAliasDTO<T, AT> {
      public L7EntityAliasWrapper(T var1, AT var2) {
         super((T)var1, (AT)var2);
      }

      @Override
      protected Object createWrapperObject() {
         return null;
      }
   }
}
