package org.nlab.smtp.pool;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

import java.util.concurrent.TimeUnit;

/**
 * Ease pool configuration with default pool configuration
 *
 * Created by nlabrot on 12/06/17.
 */
public class PoolConfigs {

  /**
   * Default {@link GenericObjectPoolConfig} config
   * See default parameters {@link GenericObjectPoolConfig}
   * @return
   */
  public static GenericObjectPoolConfig defaultConfig() {
    return new GenericObjectPoolConfig();
  }

  /**
   * Default {@link GenericObjectPoolConfig} config
   *  {@link GenericObjectPoolConfig#getTestOnBorrow} : true
   *  minIdle: 0
   *  maxIdle: 8
   *  maxTotal: 8
   *  maxWaitMillis: 10000
   *  minEvictableIdleTimeMillis: 5 minutes
   *  timeBetweenEvictionRunsMillis: 10 seconds
   *
   * @return
   */
  public static GenericObjectPoolConfig standardConfig() {
    GenericObjectPoolConfig config = new GenericObjectPoolConfig();
    config.setTestOnBorrow(true);
    config.setMinIdle(0);
    config.setMaxIdle(8);
    config.setMaxTotal(8);

    config.setMinEvictableIdleTimeMillis(TimeUnit.MINUTES.toMillis(5));
    config.setTimeBetweenEvictionRunsMillis(10000);


    config.setMaxWaitMillis(10000);
    return config;
  }


  /**
   *
   * @param minIdle
   * @param maxIdle
   * @param maxTotal
   * @param maxWaitMillis
   * @param minEvictableIdleTimeMillis
   * @param timeBetweenEvictionRunsMillis
   * @return
   */
  public static GenericObjectPoolConfig standardConfig(int minIdle, int maxIdle, int maxTotal, int maxWaitMillis, int minEvictableIdleTimeMillis, int timeBetweenEvictionRunsMillis) {
    GenericObjectPoolConfig config = new GenericObjectPoolConfig();
    config.setTestOnBorrow(true);
    config.setMinIdle(minIdle);
    config.setMaxIdle(maxIdle);
    config.setMaxTotal(maxTotal);

    config.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
    config.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);


    config.setMaxWaitMillis(maxWaitMillis);
    return config;
  }
}