package config

import (
	"github.com/knadh/koanf/v2"
	"github.com/knadh/koanf/parsers/dotenv"
	"github.com/knadh/koanf/providers/env"
	"github.com/knadh/koanf/providers/file"
	log "github.com/sirupsen/logrus"
)

type Config struct {
	DatabaseURL  string `koanf:"DATABASE_URL"`
	Port         string `koanf:"PORT"`
	S3AccessKey  string `koanf:"S3_ACCESS_KEY"`
	S3SecretKey  string `koanf:"S3_SECRET_KEY"`
	S3BucketName string `koanf:"S3_BUCKET_NAME"`
	S3Endpoint   string `koanf:"S3_ENDPOINT"`
	Env          string `koanf:"ENV"`
	SecretKey    string `koanf:"SECRET_KEY"`
}

var Conf *Config

var k = koanf.New(".")

func Load() {
	if err := k.Load(file.Provider(".env"), dotenv.Parser()); err != nil {
		log.Infof("unable to find env file: %v", err)
		log.Info("falling back to env variables")
	}

	if err := k.Load(env.Provider("", ".", nil), nil); err != nil {
		log.Fatalf("error loading config: %v", err)
	}

	Conf = &Config{}
	err := k.Unmarshal("", Conf)
	if err != nil {
		log.Fatalf("error loading config: %v", err)
	}
}