package api

import (
	"os"

	"github.com/kataras/iris/v12"

	"gopkg.in/yaml.v3"
)

// Configuration holds the necessary information
// for our server, including the Iris one.
type Configuration struct {
	ServerName string `yaml:"ServerName"`
	Env        string `yaml:"Env"`
	// The server's host, if empty, defaults to 0.0.0.0
	Host string `yaml:"Host"`
	// The server's port, e.g. 80
	Port int `yaml:"Port"`
	// If not empty runs under tls with this domain using letsencrypt.
	Domain string `yaml:"Domain"`
	// Enables write response and read request compression.
	EnableCompression bool `yaml:"EnableCompression"`
	// Defines the "Access-Control-Allow-Origin" header of the CORS middleware.
	// Many can be separated by comma.
	// Defaults to "*" (allow all).
	AllowOrigin string `yaml:"AllowOrigin"`
	// If not empty a request logger is registered,
	// note that this will cost a lot in performance, use it only for debug.
	RequestLog string `yaml:"RequestLog"`
	// The database connection string.
	ConnString string `yaml:"ConnString"`
	// Iris specific configuration.
	Iris iris.Configuration `yaml:"Iris"`
}

// BindFile binds the yaml file's contents to this Configuration.
func (c *Configuration) BindFile(filename string) error {
	contents, err := os.ReadFile(filename)
	if err != nil {
		return err
	}

	return yaml.Unmarshal(contents, c)
}