package options

import "github.com/tidbcloud/pov-service/internal/model"

type WorkloadTestRefOption struct {
	WithTasks bool
}

func (opt WorkloadTestRefOption) SetWithTasks(with bool) WorkloadTestRefOption {
	opt.WithTasks = with
	return opt
}

func NewListWorkloadTestOption() ListOption[WorkloadTestRefOption] {
	return ListOption[WorkloadTestRefOption]{}
}

func ActiveWorkloads() ColumnOption {
	return ColumnOption{
		Column: "status", Values: []any{model.ExecStatusPending, model.ExecStatusRunning},
	}
}

func ExecStatus(status model.ExecStatus) ColumnOption {
	return ColumnOption{
		Column: "status", Value: status,
	}
}

func CompletedStatus() ColumnOption {
	return ExecStatus(model.ExecStatusCompleted)
}

func IsAuto() ColumnOption {
	return ColumnOption{
		Column: "is_auto", Values: []any{true},
	}
}

func WorkloadID(workloadIDs ...int64) ColumnOption {
	values := make([]any, len(workloadIDs))
	for i, id := range workloadIDs {
		values[i] = id
	}
	return ColumnOption{
		Column: "workload_id", Values: values,
	}
}

func WorkloadName(workloadNames ...string) ColumnOption {
	values := make([]any, len(workloadNames))
	for i, name := range workloadNames {
		values[i] = name
	}
	return ColumnOption{
		Column: "workload_name", Values: values,
	}
}

func WorkloadTestObjectTypes() ColumnOption {
	values := make([]any, len(model.WorkloadTestObjectTypes))
	for i, name := range model.WorkloadTestObjectTypes {
		values[i] = name
	}

	return ColumnOption{
		Column: "type", Values: values,
	}
}

func ClusterTypeOrEmpty(typ model.ClusterType) ColumnOption {
	return ColumnOption{
		Column: "cluster_type", Values: []any{typ, ""},
	}
}
