// Various Linux/Unix'y things

// https://wiki.archlinux.org/title/Dynamic_DNS

package main

import 	(
	"os"
	"os/exec"
	"net"
	"bytes"
	"fmt"
	"strings"

	"go.wit.com/log"
	"go.wit.com/shell"
)

func CheckSuperuser() bool {
	return os.Getuid() == 0
}

func Escalate() {
	if os.Getuid() != 0 {
		cmd := exec.Command("sudo", "./control-panel-dns") // TODO: get the actual path
		cmd.Stdin = os.Stdin
		cmd.Stdout = os.Stdout
		cmd.Stderr = os.Stderr
		err := cmd.Run()
		if err != nil {
			log.Error(err, "exit in Escalate()")
			log.Exit(err)
		}
	}
}

// You need permission to do a zone transfer. Otherwise:
// dig +noall +answer +multiline lab.wit.com any 
// dig +all +multiline fire.lab.wit.com # gives the zonefile header (ttl vals)
func DumpPublicDNSZone(zone string) {
	entries, err := net.LookupHost(zone)
	if err != nil {
		panic(err)
	}
	for _, entry := range entries {
		log.Println(entry)
	}
}

func dumpIPs(host string) {
    ips, err := net.LookupIP(host)
        if err != nil {
		log.Error(err, "dumpIPs() failed")
        }
        for _, ip := range ips {
                log.Println(host, ip)
        }
}

/*
	check if ddclient is installed, working, and/or configured
	https://github.com/ddclient/ddclient
*/
func ddclient() {
}

/*
	check if ddupdate is installed, working, and/or configured
*/
func ddupdate() {
}

func run(s string) string {
	cmdArgs := strings.Fields(s)
	// Define the command you want to run
	// cmd := exec.Command(cmdArgs)
	cmd := exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...)

	// Create a buffer to capture the output
	var out bytes.Buffer

	// Set the output of the command to the buffer
	cmd.Stdout = &out

	// Run the command
	err := cmd.Run()
	if err != nil {
		fmt.Println("Error running command:", err)
		return ""
	}

	tmp := shell.Chomp(out.String())
	// Output the results
	log.Info("Command Output:", tmp)

	return tmp
}