package worldconfig

import (
	"bufio"
	"os"
	"strings"
)

const (
	BACKEND_SQLITE3  string = "sqlite3"
	BACKEND_FILES    string = "files"
	BACKEND_POSTGRES string = "postgresql"
)

const (
	CONFIG_BACKEND         string = "backend"
	CONFIG_PLAYER_BACKEND  string = "player_backend"
	CONFIG_PSQL_CONNECTION string = "pgsql_connection"
	CONFIG_PSQL_MAPSERVER  string = "pgsql_mapserver_connection"
)

type PsqlConfig struct {
	Host     string
	Port     int
	Username string
	Password string
	DbName   string
}

type WorldConfig struct {
	Backend       string
	PlayerBackend string

	PsqlConnection      string
	MapObjectConnection string
}

func Parse(filename string) WorldConfig {
	file, err := os.Open(filename)
	if err != nil {
		panic(err)
	}
	defer file.Close()

	cfg := WorldConfig{}

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		line := scanner.Text()
		sepIndex := strings.Index(line, "=")
		if sepIndex < 0 {
			continue
		}

		valueStr := strings.Trim(line[sepIndex+1:], " ")
		keyStr := strings.Trim(line[:sepIndex], " ")

		switch keyStr {
		case CONFIG_BACKEND:
			cfg.Backend = valueStr
		case CONFIG_PLAYER_BACKEND:
			cfg.PlayerBackend = valueStr
		case CONFIG_PSQL_CONNECTION:
			cfg.PsqlConnection = valueStr
		case CONFIG_PSQL_MAPSERVER:
			cfg.MapObjectConnection = valueStr
		}

	}

	return cfg
}
