package config

import (
	"encoding/json"
	"os"
	"path/filepath"
	"testing"
	"time"

	expect "github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
	"go.skia.org/infra/go/deepequal/assertdeep"
	"go.skia.org/infra/go/testutils"
)

type TestInnerConfig struct {
	Name      string
	Frequency Duration
}

type TestConfig struct {
	Delay   Duration
	Count   int
	Percent float64
	Allow   bool
	Sources []string
	Primary TestInnerConfig
	Items   []*TestInnerConfig
	Params  map[string]string
}

func TestDuration(t *testing.T) {
	type dummy struct {
		Dur Duration
	}
	orig := dummy{
		Dur: Duration{5 * time.Second},
	}
	enc, err := json.Marshal(&orig)
	require.NoError(t, err)
	expect.Equal(t, `{"Dur":"5s"}`, string(enc))

	parsed := dummy{}
	require.NoError(t, json.Unmarshal(enc, &parsed))
	assertdeep.Equal(t, orig, parsed)
}

func TestParseConfigFile(t *testing.T) {
	dir := testutils.TestDataDir(t)
	configFile := filepath.Join(dir, "TestParseConfigFile.json5")
	parsed := TestConfig{}
	require.NoError(t, ParseConfigFile(configFile, "", &parsed))
	expected := TestConfig{
		Delay:   Duration{17 * time.Minute},
		Count:   2400,
		Percent: 0.25,
		Allow:   true,
		Sources: []string{"internet", "local", "random"},
		Primary: TestInnerConfig{
			Name:      "run-tests",
			Frequency: Duration{10 * time.Minute},
		},
		Items: []*TestInnerConfig{
			{
				Name:      "cleanup",
				Frequency: Duration{24 * time.Hour},
			},
			nil,
			{},
			{
				Name:      "refresh",
				Frequency: Duration{100 * time.Millisecond},
			},
		},
		Params: map[string]string{
			"os":   "Linux",
			"arch": "amd64",
		},
	}
	assertdeep.Equal(t, expected, parsed)
}

func TestParseConfigFileDoesntExist(t *testing.T) {
	dir := t.TempDir()
	configFile := filepath.Join(dir, "nonexistent-file.json5")
	parsed := TestConfig{}
	err := ParseConfigFile(configFile, "--main-config", &parsed)
	require.Error(t, err)
	require.Regexp(t, `Unable to read --main-config file ".*/nonexistent-file.json5":.* no such file or directory`, err.Error())
}

func TestParseConfigFileInvalid(t *testing.T) {
	dir := t.TempDir()
	configFile := filepath.Join(dir, "invalid.json5")
	require.NoError(t, os.WriteFile(configFile, []byte("Hi Mom!"), os.ModePerm))
	parsed := TestConfig{}
	err := ParseConfigFile(configFile, "", &parsed)
	require.Error(t, err)
	require.Regexp(t, `Unable to parse file ".*/invalid.json5": invalid character 'H' looking for beginning of value`, err.Error())
}
