package template_functions

import (
	"errors"
	"strconv"
	"time"

	"git.ctdo.de/henne/blitzer-v2/config"
)

func For(start, end int) <-chan int {
	c := make(chan int)
	go func() {
		for i := start; i <= end; i++ {
			c <- i
		}
		close(c)
	}()
	return c
}

func Price(price int) string {
	amount := strconv.Itoa(price)
	for len(amount) < 3 {
		amount = "0" + amount
	}
	amount = amount[:len(amount)-2] + "." + amount[len(amount)-2:]
	return amount
}
func BaseUrl() string {
	return config.C.BaseUrl
}
func Now() time.Time {
	return time.Now()
}
func Add(x, y int) int {
	return x + y
}
func Dict(values ...interface{}) (map[string]interface{}, error) {
	if len(values)%2 != 0 {
		return nil, errors.New("invalid dict call")
	}
	dict := make(map[string]interface{}, len(values)/2)
	for i := 0; i < len(values); i += 2 {
		key, ok := values[i].(string)
		if !ok {
			return nil, errors.New("dict keys must be strings")
		}
		dict[key] = values[i+1]
	}
	return dict, nil
}

var FunctionMap = map[string]interface{}{"For": For, "Price": Price, "BaseUrl": BaseUrl, "Now": Now, "Add": Add, "Dict": Dict}
