package config

import (
	"os"
	"path"
	"reflect"
	"strings"
	"testing"
)

var testFolder = os.ExpandEnv("$PWD/../../tests/resources/test_folder")
var validAbraConf = os.ExpandEnv("$PWD/../../tests/resources/valid_abra_config")

// make sure these are in alphabetical order
var tFolders = []string{"folder1", "folder2"}
var tFiles = []string{"bar.env", "foo.env"}

var appName = "ecloud"
var serverName = "evil.corp"

var expectedAppEnv = AppEnv{
	"DOMAIN": "ecloud.evil.corp",
	"TYPE":   "ecloud",
}

var expectedApp = App{
	Name:   appName,
	Type:   expectedAppEnv["TYPE"],
	Domain: expectedAppEnv["DOMAIN"],
	Env:    expectedAppEnv,
	Path:   expectedAppFile.Path,
	Server: expectedAppFile.Server,
}

var expectedAppFile = AppFile{
	Path:   path.Join(validAbraConf, "servers", serverName, appName+".env"),
	Server: serverName,
}

var expectedAppFiles = map[string]AppFile{
	appName: expectedAppFile,
}

// var expectedServerNames = []string{"evil.corp"}

func TestGetAllFoldersInDirectory(t *testing.T) {
	folders, err := getAllFoldersInDirectory(testFolder)
	if err != nil {
		t.Fatal(err)
	}
	if !reflect.DeepEqual(folders, tFolders) {
		t.Fatalf("did not get expected folders. Expected: (%s), Got: (%s)", strings.Join(tFolders, ","), strings.Join(folders, ","))
	}
}

func TestGetAllFilesInDirectory(t *testing.T) {
	files, err := getAllFilesInDirectory(testFolder)
	if err != nil {
		t.Fatal(err)
	}
	var fileNames []string
	for _, file := range files {
		fileNames = append(fileNames, file.Name())
	}
	if !reflect.DeepEqual(fileNames, tFiles) {
		t.Fatalf("did not get expected files. Expected: (%s), Got: (%s)", strings.Join(tFiles, ","), strings.Join(fileNames, ","))
	}
}

func TestReadEnv(t *testing.T) {
	env, err := ReadEnv(expectedAppFile.Path)
	if err != nil {
		t.Fatal(err)
	}
	if !reflect.DeepEqual(env, expectedAppEnv) {
		t.Fatalf(
			"did not get expected application settings. Expected: DOMAIN=%s TYPE=%s; Got: DOMAIN=%s TYPE=%s",
			expectedAppEnv["DOMAIN"],
			expectedAppEnv["TYPE"],
			env["DOMAIN"],
			env["TYPE"],
		)
	}
}