package com.airlock.iam.application.webserver.infrastructure.deploy;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.nio.file.Path;
import java.time.Duration;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.webresources.AbstractResourceSet;
import org.apache.catalina.webresources.DirResourceSet;

public final class SpaResourceSet {
   private final AbstractResourceSet resourceSet;

   private SpaResourceSet(AbstractResourceSet resourceSet) {
      this.resourceSet = resourceSet;
   }

   public static SpaResourceSet spaZipResourceSet(WebResourceRoot root, String webAppMount, Path zipPath, Duration reloadDelay) {
      SpaCustomizationZipResourceSet zipResourceSet = new SpaCustomizationZipResourceSet(root, webAppMount, zipPath, reloadDelay);
      root.addPostResources(zipResourceSet);
      return new SpaResourceSet(zipResourceSet);
   }

   public static SpaResourceSet spaDirResourceSet(WebResourceRoot root, String webAppMount, String base) {
      DirResourceSet dirResourceSet = new DirResourceSet(root, webAppMount, base, "/");
      root.addPostResources(dirResourceSet);
      return new SpaResourceSet(dirResourceSet);
   }

   @SuppressFBWarnings(justification = "generated code")
   public AbstractResourceSet getResourceSet() {
      return this.resourceSet;
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public boolean equals(Object o) {
      if (o == this) {
         return true;
      } else if (!(o instanceof SpaResourceSet other)) {
         return false;
      } else {
         Object this$resourceSet = this.resourceSet;
         Object other$resourceSet = other.resourceSet;
         return this$resourceSet == null ? other$resourceSet == null : this$resourceSet.equals(other$resourceSet);
      }
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public int hashCode() {
      int PRIME = 59;
      int result = 1;
      Object $resourceSet = this.resourceSet;
      return result * 59 + ($resourceSet == null ? 43 : $resourceSet.hashCode());
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public String toString() {
      return "SpaResourceSet(resourceSet=" + this.getResourceSet() + ")";
   }
}
