// Copyright 2023 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package targets

import (
	"fmt"
)

// Auxiliary target contains the properties of a target auxiliary device.
type AuxiliaryConfig map[string]any

type Auxiliary struct {
	config AuxiliaryConfig
}

// TestConfig returns fields describing the target to be provided to tests.
func (t *Auxiliary) TestConfig(netboot bool) (any, error) {
	return t.config, nil
}

// NewAuxiliary returns a new Auxiliary target with a given configuration.
func NewAuxiliary(config AuxiliaryConfig) (*Auxiliary, error) {
	device, ok := config["device"].(string)
	if !ok {
		return nil, fmt.Errorf("auxiliary config requires target to be a string.")
	}
	if device == "" {
		return nil, fmt.Errorf("device cannot be an empty string.")
	}

	config["type"] = device

	delete(config, "device")

	return &Auxiliary{
		config: config,
	}, nil
}
