// Path: src/main/java/io/castle/client/internal/backend/CastleBackendProvider.java
// public enum CastleBackendProvider {
//     OKHTTP
// }
// 
// Path: src/main/java/io/castle/client/internal/utils/HeaderNormalizer.java
// public class HeaderNormalizer {
// 
//     public String normalize(String headerName) {
//         if (headerName == null) {
//             return null;
//         }
//         return headerName.toLowerCase().replaceAll("_", "-");
//     }
// 
// 
//     public List<String> normalizeList(List<String> headers) {
//         if (headers == null) {
//             return null;
//         }
//         ImmutableList.Builder<String> builder = ImmutableList.builder();
//         for (Iterator<String> iterator = headers.iterator(); iterator.hasNext(); ) {
//             String value = iterator.next();
//             builder.add(normalize(value));
//         }
//         return builder.build();
//     }
// }
// 
// Path: src/main/java/io/castle/client/model/AuthenticateAction.java
// public enum AuthenticateAction {
//     ALLOW, DENY, CHALLENGE;
// 
//     /**
//      * Returns an AuthenticateAction from a string representing its name.
//      *
//      * @param action string representing the name of the AuthenticateAction, case-insensitive
//      * @return the enum value matching the name, or null if it does not match any enum
//      */
//     public static AuthenticateAction fromAction(String action) {
//         for (AuthenticateAction kind : AuthenticateAction.class.getEnumConstants()) {
//             if (kind.name().equalsIgnoreCase(action)) {
//                 return kind;
//             }
//         }
//         return null;
//     }
// }
// 
// Path: src/main/java/io/castle/client/model/AuthenticateFailoverStrategy.java
// public class AuthenticateFailoverStrategy {
// 
//     private final AuthenticateAction defaultAction;
//     private final boolean throwTimeoutException;
// 
//     private AuthenticateFailoverStrategy(AuthenticateAction defaultAction, boolean throwTimeoutException) {
//         this.defaultAction = defaultAction;
//         this.throwTimeoutException = throwTimeoutException;
//     }
// 
//     /**
//      * Sets the default authenticationAction for failed requests.
//      *
//      * @param action the authenticateAction that will be used as a default for failed requests
//      */
//     public AuthenticateFailoverStrategy(AuthenticateAction action) {
//         this(action, false);
//     }
// 
//     /**
//      * Creates an authenticationStrategy whose policy is to throw a timeoutException.
//      */
//     public AuthenticateFailoverStrategy() {
//         this(null, true);
//     }
// 
// 
//     /**
//      * Gets the authenticateAction that this strategy uses for failover.
//      *
//      * @return the authenticateAction configured as default; null if there is no default AuthenticateAction
//      */
//     public AuthenticateAction getDefaultAction() {
//         return defaultAction;
//     }
// 
//     /**
//      * Checks whether the failover strategy is configured to throw a timeoutException.
//      *
//      * @return true if the failover strategy is set to throw a timeoutException, false otherwise
//      */
//     public boolean isThrowTimeoutException() {
//         return throwTimeoutException;
//     }
// }
// 
// Path: src/main/java/io/castle/client/model/CastleSdkConfigurationException.java
// public class CastleSdkConfigurationException extends Exception {
// 
//     public CastleSdkConfigurationException(String message) {
//         super(message);
//     }
// }


import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import io.castle.client.internal.backend.CastleBackendProvider;
import io.castle.client.internal.utils.HeaderNormalizer;
import io.castle.client.model.AuthenticateAction;
import io.castle.client.model.AuthenticateFailoverStrategy;
import io.castle.client.model.CastleSdkConfigurationException;
import java.util.LinkedList;
import java.util.List;
        return this;
    }

    /**
     * Sets the failover strategy for the authenticate Castle API call to allow.
     * <p>
     * The authenticate failover strategy for the default configuration is to return {@link AuthenticateAction#ALLOW}.
     *
     * @return a castleConfigurationBuilder with allow as the authenticate failover strategy
     */
    public CastleConfigurationBuilder withDefaultAuthenticateFailoverStrategy() {
        return this.withAuthenticateFailoverStrategy(new AuthenticateFailoverStrategy(AuthenticateAction.ALLOW));
    }

    /**
     * Sets the endpoint of the Castle API to its default value.
     * <p>
     * The default value is {@code https://api.castle.io/}.
     * @return a castleConfigurationBuilder with the default value for the Castle API endpoint
     */
    public CastleConfigurationBuilder withDefaultApiBaseUrl() {
        return this.withApiBaseUrl("https://api.castle.io/");
    }

    /**
     * Sets the OkHttp backend for all API calls.
     *
     * @return a castleConfigurationBuilder with the backend set to okHttp
     */
    public CastleConfigurationBuilder withDefaultBackendProvider() {
// Path: src/main/java/io/castle/client/internal/backend/CastleBackendProvider.java
// public enum CastleBackendProvider {
//     OKHTTP
// }
// 
// Path: src/main/java/io/castle/client/internal/utils/HeaderNormalizer.java
// public class HeaderNormalizer {
// 
//     public String normalize(String headerName) {
//         if (headerName == null) {
//             return null;
//         }
//         return headerName.toLowerCase().replaceAll("_", "-");
//     }
// 
// 
//     public List<String> normalizeList(List<String> headers) {
//         if (headers == null) {
//             return null;
//         }
//         ImmutableList.Builder<String> builder = ImmutableList.builder();
//         for (Iterator<String> iterator = headers.iterator(); iterator.hasNext(); ) {
//             String value = iterator.next();
//             builder.add(normalize(value));
//         }
//         return builder.build();
//     }
// }
// 
// Path: src/main/java/io/castle/client/model/AuthenticateAction.java
// public enum AuthenticateAction {
//     ALLOW, DENY, CHALLENGE;
// 
//     /**
//      * Returns an AuthenticateAction from a string representing its name.
//      *
//      * @param action string representing the name of the AuthenticateAction, case-insensitive
//      * @return the enum value matching the name, or null if it does not match any enum
//      */
//     public static AuthenticateAction fromAction(String action) {
//         for (AuthenticateAction kind : AuthenticateAction.class.getEnumConstants()) {
//             if (kind.name().equalsIgnoreCase(action)) {
//                 return kind;
//             }
//         }
//         return null;
//     }
// }
// 
// Path: src/main/java/io/castle/client/model/AuthenticateFailoverStrategy.java
// public class AuthenticateFailoverStrategy {
// 
//     private final AuthenticateAction defaultAction;
//     private final boolean throwTimeoutException;
// 
//     private AuthenticateFailoverStrategy(AuthenticateAction defaultAction, boolean throwTimeoutException) {
//         this.defaultAction = defaultAction;
//         this.throwTimeoutException = throwTimeoutException;
//     }
// 
//     /**
//      * Sets the default authenticationAction for failed requests.
//      *
//      * @param action the authenticateAction that will be used as a default for failed requests
//      */
//     public AuthenticateFailoverStrategy(AuthenticateAction action) {
//         this(action, false);
//     }
// 
//     /**
//      * Creates an authenticationStrategy whose policy is to throw a timeoutException.
//      */
//     public AuthenticateFailoverStrategy() {
//         this(null, true);
//     }
// 
// 
//     /**
//      * Gets the authenticateAction that this strategy uses for failover.
//      *
//      * @return the authenticateAction configured as default; null if there is no default AuthenticateAction
//      */
//     public AuthenticateAction getDefaultAction() {
//         return defaultAction;
//     }
// 
//     /**
//      * Checks whether the failover strategy is configured to throw a timeoutException.
//      *
//      * @return true if the failover strategy is set to throw a timeoutException, false otherwise
//      */
//     public boolean isThrowTimeoutException() {
//         return throwTimeoutException;
//     }
// }
// 
// Path: src/main/java/io/castle/client/model/CastleSdkConfigurationException.java
// public class CastleSdkConfigurationException extends Exception {
// 
//     public CastleSdkConfigurationException(String message) {
//         super(message);
//     }
// }


// Path: src/main/java/io/castle/client/internal/config/CastleConfigurationBuilder.java
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import io.castle.client.internal.backend.CastleBackendProvider;
import io.castle.client.internal.utils.HeaderNormalizer;
import io.castle.client.model.AuthenticateAction;
import io.castle.client.model.AuthenticateFailoverStrategy;
import io.castle.client.model.CastleSdkConfigurationException;
import java.util.LinkedList;
import java.util.List;

        return this;
    }

    /**
     * Sets the failover strategy for the authenticate Castle API call to allow.
     * <p>
     * The authenticate failover strategy for the default configuration is to return {@link AuthenticateAction#ALLOW}.
     *
     * @return a castleConfigurationBuilder with allow as the authenticate failover strategy
     */
    public CastleConfigurationBuilder withDefaultAuthenticateFailoverStrategy() {
        return this.withAuthenticateFailoverStrategy(new AuthenticateFailoverStrategy(AuthenticateAction.ALLOW));
    }

    /**
     * Sets the endpoint of the Castle API to its default value.
     * <p>
     * The default value is {@code https://api.castle.io/}.
     * @return a castleConfigurationBuilder with the default value for the Castle API endpoint
     */
    public CastleConfigurationBuilder withDefaultApiBaseUrl() {
        return this.withApiBaseUrl("https://api.castle.io/");
    }

    /**
     * Sets the OkHttp backend for all API calls.
     *
     * @return a castleConfigurationBuilder with the backend set to okHttp
     */
    public CastleConfigurationBuilder withDefaultBackendProvider() {
        return this.withBackendProvider(CastleBackendProvider.OKHTTP);