package secret

import (
	"errors"
	"fmt"
	"os/exec"

	"coopcloud.tech/abra/pkg/i18n"
	"coopcloud.tech/abra/pkg/log"
)

// PassInsertSecret inserts a secret into a pass store.
func PassInsertSecret(secretValue, secretName, appName, server string) error {
	if _, err := exec.LookPath("pass"); err != nil {
		return errors.New(i18n.G("pass command not found on $PATH, is it installed?"))
	}

	cmd := fmt.Sprintf(
		"echo %s | pass insert hosts/%s/%s/%s -m",
		secretValue, server, appName, secretName,
	)

	log.Debug(i18n.G("attempting to run %s", cmd))

	if err := exec.Command("bash", "-c", cmd).Run(); err != nil {
		return err
	}

	log.Info(i18n.G("%s inserted into pass store", secretName))

	return nil
}

// PassRmSecret deletes a secret from a pass store.
func PassRmSecret(secretName, appName, server string) error {
	if _, err := exec.LookPath("pass"); err != nil {
		return errors.New(i18n.G("pass command not found on $PATH, is it installed?"))
	}

	cmd := fmt.Sprintf(
		"pass rm --force hosts/%s/%s/%s",
		server, appName, secretName,
	)

	log.Debug(i18n.G("attempting to run %s", cmd))

	if err := exec.Command("bash", "-c", cmd).Run(); err != nil {
		return err
	}

	log.Info(i18n.G("%s removed from pass store", secretName))

	return nil
}
