// Copyright 2022 schukai GmbH
// SPDX-License-Identifier: AGPL-3.0

package xflags

import (
	"github.com/stretchr/testify/assert"
	"gitlab.schukai.com/oss/libraries/go/utilities/pathfinder"
	"testing"
)

type ConfigStruct6Sub1 struct {
	Command3Flag1 bool
}

type ConfigStruct6 struct {
	ValGlobal1       bool
	ValGlobal2       bool
	ValCommand1Flag1 bool
	ValCommand1Flag2 bool
	ValSub           ConfigStruct6Sub1
}

func TestFlagCopyToProxy(t *testing.T) {

	c := ConfigStruct6{}
	c.ValSub.Command3Flag1 = true

	settings := New("test", testExecutionStruct{})
	assert.NotNil(t, settings)

	settings.SetMappedObject(&c)
	assert.False(t, settings.HasErrors())

	settings.Parse([]string{"-a", "command1", "-d"})

	assert.True(t, c.ValGlobal1)
	assert.True(t, c.ValCommand1Flag2)

}

func (s *ConfigStruct6) Copy(m map[string]any) {
	for k, v := range m {
		pathfinder.SetValue(s, k, v)
	}
}

func TestCopyable(t *testing.T) {

	c := ConfigStruct6{}
	c.ValSub.Command3Flag1 = true

	settings := execute(testExecutionStruct{}, &c, "test", []string{"-a", "command3"})

	assert.False(t, settings.HasErrors())
}