package db

import (
	"errors"
	"fmt"
	"th7/data/config"
	"th7/ports"
	"time"
)

func NewAdapter(corePort ports.CorePort, cfg config.Config) (ports.DBPort, error) {

	var duration time.Duration
	var no_logging bool
	var adapter ports.DBPort
	var err error

	no_logging = cfg.Board.NoLogging
	duration = time.Duration(cfg.Board.Logfreq) * time.Second

	if _, ok := cfg.DB["type"]; !ok || no_logging {
		adapter, _ = NewDummyAdapter() // it doesn't fail
		go startLoggingProcess(adapter, corePort, duration)
		return adapter, nil
	}

	db := fmt.Sprint(cfg.DB["type"])

	switch db {
	case "sqlite3":
		adapter, err = NewSQLite3Adapter(cfg.DB)

	default:
		return &DummyAdapter{}, errors.New("unknown db type")
	}

	if err != nil {
		return &DummyAdapter{}, err
	}

	go startLoggingProcess(adapter, corePort, duration)
	return adapter, nil
}