package com.l7tech.policy;

import com.l7tech.objectmodel.Alias;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.SecurityZone;
import com.l7tech.objectmodel.folder.Folder;
import com.l7tech.objectmodel.migration.Migration;
import com.l7tech.objectmodel.migration.MigrationMappingSelection;
import com.l7tech.objectmodel.migration.PropertyResolver;
import com.l7tech.search.Dependency;
import com.l7tech.util.DeserializeSafe;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlTransient;
import org.hibernate.annotations.Proxy;
import org.hibernate.annotations.Type;
import org.jetbrains.annotations.Nullable;

@XmlRootElement
@Entity
@Proxy(lazy = false)
@Table(name = "policy_alias")
@DeserializeSafe
public class PolicyAlias extends Alias<Policy> {
   static final long serialVersionUID = 5474493659706871761L;

   @Deprecated
   protected PolicyAlias() {
   }

   public PolicyAlias(Policy var1, Folder var2) {
      super(var1, var2, var1.getSecurityZone() != null && var1.getSecurityZone().permitsEntityType(EntityType.POLICY_ALIAS) ? var1.getSecurityZone() : null);
   }

   public PolicyAlias(PolicyHeader var1, Folder var2, @Nullable SecurityZone var3) {
      super(var1.getGoid(), var2, var3);
   }

   @XmlTransient
   @Transient
   @Override
   public EntityType getEntityType() {
      return EntityType.POLICY;
   }

   @Migration(mapName = MigrationMappingSelection.NONE, mapValue = MigrationMappingSelection.NONE, resolver = PropertyResolver.Type.POLICY_ALIAS)
   @Dependency(type = Dependency.DependencyType.POLICY, methodReturnType = Dependency.MethodReturnType.GOID)
   @Column(name = "policy_goid")
   @Type(type = "com.l7tech.server.util.GoidType")
   @Override
   public Goid getEntityGoid() {
      return this.entityGoid;
   }

   @Deprecated
   @Override
   public void setEntityGoid(Goid var1) {
      super.setEntityGoid(var1);
   }
}
