package net.northking.cctp.common.db.mode;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 数据库读写模式的上下文根
 *
 * @author xiusong.xie
 * @since 2.4
 */
public class DataBaseModeContext
{
  /**
   * 日志
   */
  private final static Logger logger = LoggerFactory.getLogger(DataBaseModeContext.class);

  private DataBaseModeContext()
  {
  }

  /**
   * 数据库读写模式
   */
  private static final ThreadLocal<Boolean> Write_Mode = new ThreadLocal<>();

  /**
   * 设置数据库操作类型：读
   */
  public static void readMode()
  {
    Write_Mode.set(false);
    logger.debug("数据库读写模式: 切换至 读库(Read-Mode)");
  }

  /**
   * 设置数据库操作类型：写
   */
  public static void writeMode()
  {
    Write_Mode.set(true);
    logger.debug("数据库读写模式: 切换至 写库(Write-Mode)");
  }

  /**
   * 是否数据源写模式
   *
   * @return 是否数据源写模式
   */
  public static boolean isWriteMode()
  {
    if (Write_Mode.get() == null || Write_Mode.get())
    {
      return true;
    } else
    {
      return false;
    }
  }

  /**
   * 是否数据源读模式
   *
   * @return 是否数据源读模式
   */
  public static boolean isReadMode()
  {
    return !isWriteMode();
  }

  /**
   * 重置数据库读写模式
   */
  public static void unload()
  {
    Write_Mode.remove();
    Write_Mode.set(true);
  }
}
