package workspace

import (
	"github.com/tidbcloud/AgentTeam/internal/api/dto/converter"
	workspaceservice "github.com/tidbcloud/AgentTeam/internal/service/workspace"
)

type machineView workspaceservice.Machine

func (m machineView) WorkspaceMachineFields() converter.WorkspaceMachineFields {
	return converter.WorkspaceMachineFields{
		ID:                       m.ID,
		Name:                     m.Name,
		Status:                   m.Status,
		APIKeyPrefix:             m.APIKeyPrefix,
		CanManage:                m.CanManage,
		Hostname:                 m.Hostname,
		OS:                       m.OS,
		DaemonVersion:            m.DaemonVersion,
		Runtimes:                 m.Runtimes,
		RuntimeDefaults:          machineRuntimeDefaults(m.RuntimeDefaults),
		CreatedAt:                m.CreatedAt,
		CreatedByUserID:          m.CreatedByUserID,
		DirectoryBrowseSupported: m.DirectoryBrowseSupported,
		DashboardSupported:       m.DashboardSupported,
	}
}

func machineRuntimeDefaults(defaults map[string]workspaceservice.RuntimeDefaults) map[string]converter.WorkspaceRuntimeDefaultsFields {
	if len(defaults) == 0 {
		return nil
	}
	out := make(map[string]converter.WorkspaceRuntimeDefaultsFields, len(defaults))
	for runtime, value := range defaults {
		out[runtime] = converter.WorkspaceRuntimeDefaultsFields{Model: value.Model, ReasoningEffort: value.ReasoningEffort}
	}
	return out
}

func toMachineView(m workspaceservice.Machine) machineView {
	return machineView(m)
}

func toMachineViews(machines []workspaceservice.Machine) []machineView {
	if machines == nil {
		return nil
	}
	out := make([]machineView, len(machines))
	for i, m := range machines {
		out[i] = machineView(m)
	}
	return out
}
