package settings

import (
  "mapserver/mapobjectdb"
  "strconv"
)

const (
	SETTING_LAST_MTIME = "last_mtime"
	SETTING_LASTX = "last_x"
	SETTING_LASTY = "last_y"
	SETTING_LASTZ = "last_z"
  SETTING_INITIAL_RUN = "initial_run"
  SETTING_LEGACY_PROCESSED = "legacy_processed"
)

type Settings struct {
  db mapobjectdb.DBAccessor
}

func New(db mapobjectdb.DBAccessor) *Settings{
  return &Settings{
    db: db,
  }
}

func (this *Settings) GetString(key string, defaultValue string) string {
  str, err := this.db.GetSetting(key, defaultValue)
  if err != nil {
    panic(err)
  }

  return str
}

func (this *Settings) SetString(key string, value string) {
  err := this.db.SetSetting(key, value)
  if err != nil {
    panic(err)
  }
}

func (this *Settings) GetInt(key string, defaultValue int) int {
  str, err := this.db.GetSetting(key, strconv.Itoa(defaultValue))
  if err != nil {
    panic(err)
  }

	value, err := strconv.Atoi(str)
	if err != nil {
		panic(err)
	}

  return value
}

func (this *Settings) SetInt(key string, value int) {
  err := this.db.SetSetting(key, strconv.Itoa(value))
  if err != nil {
		panic(err)
	}
}

func (this *Settings) GetInt64(key string, defaultValue int64) int64 {
  str, err := this.db.GetSetting(key, strconv.FormatInt(defaultValue, 10))
  if err != nil {
    panic(err)
  }

	value, err := strconv.ParseInt(str, 10, 64)
	if err != nil {
		panic(err)
	}

  return value
}

func (this *Settings) SetInt64(key string, value int64) {
  err := this.db.SetSetting(key, strconv.FormatInt(value, 10))
  if err != nil {
		panic(err)
	}
}


func (this *Settings) GetBool(key string, defaultValue bool) bool {
  defStr := "false"
  if defaultValue {
    defStr = "true"
  }

  str, err := this.db.GetSetting(key, defStr)
  if err != nil {
    panic(err)
  }

  return str == "true"
}

func (this *Settings) SetBool(key string, value bool) {
  defStr := "false"
  if value {
    defStr = "true"
  }

  err := this.db.SetSetting(key, defStr)
  if err != nil {
		panic(err)
	}
}