package main

import (
	"os"
	"time"

	log "github.com/sirupsen/logrus"
)

const configChangeCheckInterval = time.Second

type configChangeEvent uint8

const (
	configChangeEventUnkown configChangeEvent = iota
	configChangeEventNotExist
	configChangeEventModified
)

func watchConfigChanges(filename string, evt chan configChangeEvent) {
	var (
		available   bool
		initialized bool
		size        int64
		modTime     time.Time
	)

	for range time.NewTicker(configChangeCheckInterval).C {
		info, err := os.Stat(filename)
		switch {
		case err == nil:
			// Fine

		case os.IsNotExist(err):
			if available {
				evt <- configChangeEventNotExist
			}
			available = false
			continue

		default:
			log.WithError(err).Error("Failed to get config stat")
			continue
		}

		if initialized && (info.Size() != size || !info.ModTime().Equal(modTime)) {
			evt <- configChangeEventModified
		}

		available = true
		initialized = true
		size = info.Size()
		modTime = info.ModTime()
	}
}