package model

import (
	"fmt"
	"io/ioutil"

	"gopkg.in/yaml.v2"
)

const (
	DefaultPort = 8080
)

type Config struct {
	DatabasePath *string `yaml:"database_path"`
	Port         *int    `yaml:"port"`
}

func (c *Config) SetDefaults() {
	if c.Port == nil {
		c.Port = NewInt(DefaultPort)
	}
}

func (c *Config) IsValid() error {
	if c.DatabasePath == nil || *c.DatabasePath == "" {
		return fmt.Errorf("database_path cannot be empty")
	}

	if c.Port == nil || *c.Port == 0 {
		return fmt.Errorf("port cannot be empty")
	}

	return nil
}

func ReadConfig(path string) (*Config, error) {
	b, err := ioutil.ReadFile(path)
	if err != nil {
		return nil, err
	}

	var config Config
	if err := yaml.Unmarshal(b, &config); err != nil {
		return nil, err
	}

	return &config, nil
}
