package message_pusher

import (
	"gopkg.in/yaml.v2"
	"os"
)

const (
	// DefaultBaseURL is the base URL used to expand short topic names
	DefaultBaseURL = "https://push.107421.xyz"

	DefaultBaseToken = "tk_zvdb67fwj1hrjivkq3ga9z7u63av5"

	DefaultTopic = "cmii"
)

// Config is the config struct for a Client
type Config struct {
	DefaultHost     string      `yaml:"default-host"`
	DefaultUser     string      `yaml:"default-user"`
	DefaultPassword *string     `yaml:"default-password"`
	DefaultToken    string      `yaml:"default-token"`
	DefaultCommand  string      `yaml:"default-command"`
	DefaultTopic    string      `yaml:"default-topic"`
	Subscribe       []Subscribe `yaml:"subscribe"`
}

// Subscribe is the struct for a Subscription within Config
type Subscribe struct {
	Topic    string            `yaml:"topic"`
	User     *string           `yaml:"user"`
	Password *string           `yaml:"password"`
	Token    *string           `yaml:"token"`
	Command  string            `yaml:"command"`
	If       map[string]string `yaml:"if"`
}

// NewDefaultConfig creates a new Config struct for a Client
func NewDefaultConfig() *Config {
	return &Config{
		DefaultHost:     DefaultBaseURL,
		DefaultUser:     "",
		DefaultPassword: nil,
		DefaultToken:    DefaultBaseToken,
		DefaultTopic:    DefaultTopic,
		DefaultCommand:  "",
		Subscribe:       nil,
	}
}

// LoadConfig loads the Client config from a yaml file
func LoadConfig(filename string) (*Config, error) {
	b, err := os.ReadFile(filename)
	if err != nil {
		return nil, err
	}
	c := NewDefaultConfig()
	if err := yaml.Unmarshal(b, c); err != nil {
		return nil, err
	}
	return c, nil
}
