//nolint:gochecknoglobals,goerr113
package config

import "fmt"

var Cfg Config

type Config struct {
	// Reader is used to configure the RFID Reader.
	Reader struct {
		Dev string `mapstructure:"Dev"`
	} `mapstructure:"Reader"`

	// Box is used to configure a webinterface.
	Box struct {
		Hostname string `mapstructure:"Hostname"`
		Port     int    `mapstructure:"Port"`
	} `mapstructure:"Box"`

	// MPD contains the connection details for the Music Player Daemon.
	MPD struct {
		Hostname string
		Port     int
	} `mapstructure:"MPD"`

	// Meta contains all meta RFID's.
	Meta struct {
		Stop string `mapstructure:"Stop"`
	} `mapstructure:"Meta"`

	// Tracks contains all RFID's and its MPD URLs.
	Tracks map[string]struct {
		Name string   `mapstructure:"Name"`
		URIS []string `mapstructure:"URIS"`
	} `mapstructure:"Tracks"`
}

func (c *Config) Require() error {
	// RFID.
	if c.Reader.Dev == "" {
		return fmt.Errorf("missing: Reader.Dev")
	}

	// MPD.
	if c.MPD.Hostname == "" {
		return fmt.Errorf("missing: MPD.Hostname")
	}

	if c.MPD.Port == 0 {
		return fmt.Errorf("missing: MPD.Port")
	}

	// Meta.
	if c.Meta.Stop == "" {
		return fmt.Errorf("missing: Meta.Stop")
	}

	return nil
}
