package server

import (
	"strings"

	"coopcloud.tech/abra/cli/formatter"
	"coopcloud.tech/abra/pkg/client"
	"coopcloud.tech/abra/pkg/config"
	"github.com/sirupsen/logrus"
	"github.com/urfave/cli/v2"
)

var serverListCommand = &cli.Command{
	Name:      "list",
	Aliases:   []string{"ls"},
	Usage:     "List managed servers",
	ArgsUsage: " ",
	HideHelp:  true,
	Action: func(c *cli.Context) error {
		dockerContextStore := client.NewDefaultDockerContextStore()
		contexts, err := dockerContextStore.Store.List()
		if err != nil {
			logrus.Fatal(err)
		}

		tableColumns := []string{"Name", "Connection"}
		table := formatter.CreateTable(tableColumns)
		defer table.Render()

		serverNames, err := config.ReadServerNames()
		if err != nil {
			logrus.Fatal(err)
		}

		for _, serverName := range serverNames {
			var row []string
			for _, ctx := range contexts {
				endpoint, err := client.GetContextEndpoint(ctx)
				if err != nil && strings.Contains(err.Error(), "does not exist") {
					// No local context found, we can continue safely
					continue
				}
				if ctx.Name == serverName {
					row = []string{serverName, endpoint}
				}
			}
			if len(row) == 0 {
				if serverName == "default" {
					row = []string{serverName, "local"}
				} else {
					row = []string{serverName, "unknown"}
				}
			}
			table.Append(row)
		}

		return nil
	},
}