package com.didiglobal.thriftmock.server;

import com.google.common.collect.Maps;

import org.apache.thrift.ProcessFunction;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocolFactory;

import java.util.Map;

public class ServerConfig implements Config<ProcessFunction>{
  private static final int DEFAULT_THREAD_SIZE = 2;
  private int port;
  private int minWorkerThread;
  private int maxWorkerThread;
  private TProtocolFactory tProtocolFactory;
  private Map<String, ProcessFunction> processMap = Maps.newConcurrentMap();

  public ServerConfig(int port) {
    this(port, new TBinaryProtocol.Factory());
  }

  public ServerConfig(int port, TProtocolFactory tProtocolFactory) {
    this(port, tProtocolFactory, DEFAULT_THREAD_SIZE, DEFAULT_THREAD_SIZE);

  }

  public ServerConfig(int port, TProtocolFactory tProtocolFactory,
                      int minWorkerThread, int maxWorkerThread) {
    this.port = port;
    this.tProtocolFactory = tProtocolFactory;
    this.minWorkerThread = minWorkerThread;
    this.maxWorkerThread = maxWorkerThread;
  }

  @Override
  public int getPort() {
    return port;
  }

  @Override
  public Map<String, ProcessFunction> getProcessMap() {
    return processMap;
  }

  @Override
  public TProtocolFactory getTProtocolFactory() {
    return tProtocolFactory;
  }

  public ServerConfig setPort(int port) {
    this.port = port;
    return this;
  }

  public ServerConfig settServerProtocolFactory(TProtocolFactory tServerProtocolFactory) {
    this.tProtocolFactory = tServerProtocolFactory;
    return this;
  }

  public int getMinWorkerThread() {
    return minWorkerThread;
  }

  public void setMinWorkerThread(int minWorkerThread) {
    this.minWorkerThread = minWorkerThread;
  }

  public int getMaxWorkerThread() {
    return maxWorkerThread;
  }

  public void setMaxWorkerThread(int maxWorkerThread) {
    this.maxWorkerThread = maxWorkerThread;
  }
}