package config

import (
	"io/ioutil"
	"os"
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestAPIConfig(t *testing.T) {
	str := `
infraAPI:
  enableNetwork: true
  enableBackupRestoreRead: true

# the flowing are just required
server:
  pocManualBackupReservedDays: 1
  pocAutoBackupReservedDays: 2
  onDemandAutoBackupReservedDays: 3
  freeTrialCreditAmount: 100
  maxFreeTrialOrgs: 100
  frontendDNS: aa
  backendDNS: bb
  stage: stage
  centralRoleARN: centralRoleARN
session:
    secret: secret
`

	f, err := ioutil.TempFile("", "config-test")
	assert.Nil(t, err)
	defer func() {
		_ = os.Remove(f.Name())
	}()
	_, err = f.WriteString(str)
	assert.Nil(t, err)

	err = InitConfig(f.Name())
	assert.Nil(t, err)

	assert.True(t, Global().InfraAPIConfig.EnableNetwork)
	assert.True(t, Global().InfraAPIConfig.EnableBackupRestoreRead)
	assert.False(t, Global().InfraAPIConfig.EnableBackupRestoreWrite)
	assert.True(t, Global().InfraAPIConfig.NeedInit())
}

func TestHibernationConfig(t *testing.T) {
	str := `
hibernation:
  dryRun: true
  idleDurationThresholdMinutes: 120
  checkIdleIntervalMinutes: 10

# the flowing are just required
server:
  pocManualBackupReservedDays: 1
  pocAutoBackupReservedDays: 2
  onDemandAutoBackupReservedDays: 3
  freeTrialCreditAmount: 100
  maxFreeTrialOrgs: 100
  frontendDNS: aa
  backendDNS: bb
  stage: stage
  centralRoleARN: centralRoleARN
session:
    secret: secret
`
	f, err := ioutil.TempFile("", "config-test")
	assert.Nil(t, err)
	defer func() {
		_ = os.Remove(f.Name())
	}()
	_, err = f.WriteString(str)
	assert.Nil(t, err)

	err = InitConfig(f.Name())
	assert.Nil(t, err)

	assert.True(t, Global().HibernationConfig.DryRun)
	assert.Equal(t, Global().HibernationConfig.IdleDurationThresholdMinutes, int64(120))
	assert.Equal(t, Global().HibernationConfig.CheckIdleIntervalMinutes, int64(10))
}
