package main

import (
	"log"
	"path/filepath"
	"strings"

	"github.com/spf13/cobra"

	"code.hackerspace.pl/hscloud/cluster/clustercfg/certs"
	"code.hackerspace.pl/hscloud/go/workspace"
)

var flagFQDNs []string

var gencertsCmd = &cobra.Command{
	Use:   "gencerts",
	Short: "(re)generate keys/certs for k0 cluster",
	Long: `
If you're adding a new cluster node, run this. It will populate //cluster/secrets
and //cluster/certificates with new certs/keys.

By default, the nodes to generate certificates for are automatically discovered
by querying the local Nix machines defined in //ops, looking for anything that
has hscloud.kube.controller.enabled. That can be slow and/or incorrect. To override
node names, set --fqdn (either comma-separate them or repeat flags).
`,
	Run: func(cmd *cobra.Command, args []string) {
		ws, err := workspace.Get()
		if err != nil {
			log.Fatalf("Could not figure out workspace: %v", err)
		}
		path := filepath.Join(ws, "cluster")

		fqdns := flagFQDNs
		if len(fqdns) == 0 {
			log.Printf("--fqdn not set, figuring out machines from Nix...")
			err = workspace.EvalHscloudNix(cmd.Context(), &fqdns, "ops.exports.kubeMachineNames")
			if err != nil {
				log.Fatalf("Could not figure out Kubernetes machine FQDNs: %v", err)
			}
		}

		for _, fqdn := range fqdns {
			parts := strings.Split(fqdn, ".")
			if len(parts) != 3 || parts[1] != "hswaw" || parts[2] != "net" {
				log.Fatalf("Invalid FQDN %q: must be xxx.hswaw.net.", fqdn)
			}
		}

		log.Printf("Machines: --fqdn %s", strings.Join(fqdns, ","))
		c := certs.Prepare(path, fqdns)
		if err := c.Ensure(); err != nil {
			log.Fatalf("Failed: %v", err)
		}
		log.Printf("Done.")
	},
}

func init() {
	gencertsCmd.Flags().StringSliceVar(&flagFQDNs, "fqdn", nil, "List of machine FQDNs to generate certs for. If not set, will be automatically figured out from Nix modules in local checkout (slow).")
	rootCmd.AddCommand(gencertsCmd)
}
