package client

import (
	"context"
	"strings"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/filters"
	"github.com/docker/docker/api/types/swarm"
)

const StackNamespace = "com.docker.stack.namespace"

type StackStatus struct {
	Services []swarm.Service
	Err      error
}

func QueryStackStatus(contextName string) StackStatus {
	cl, err := NewClientWithContext(contextName)
	if err != nil {
		if strings.Contains(err.Error(), "does not exist") {
			// No local context found, bail out gracefully
			return StackStatus{[]swarm.Service{}, nil}
		}
		return StackStatus{[]swarm.Service{}, err}
	}
	ctx := context.Background()
	filter := filters.NewArgs()
	filter.Add("label", StackNamespace)
	services, err := cl.ServiceList(ctx, types.ServiceListOptions{Filters: filter})
	if err != nil {
		return StackStatus{[]swarm.Service{}, err}
	}
	return StackStatus{services, nil}
}