//go:build unix

package restic

import (
	"os"
	"os/exec"
	"os/signal"
	"syscall"
)

func watchResticSignals(process *os.Process) func() {
	signals := make(chan os.Signal, 1)
	signal.Notify(signals, os.Interrupt, syscall.SIGTERM)
	done := make(chan struct{})

	go func() {
		defer close(done)
		for sig := range signals {
			if sig == syscall.SIGTERM {
				_ = process.Signal(sig)
			}
		}
	}()

	return func() {
		signal.Stop(signals)
		close(signals)
		<-done
	}
}

func resticExitCode(exitErr *exec.ExitError) int {
	if status, ok := exitErr.Sys().(syscall.WaitStatus); ok {
		if status.Signaled() {
			return 128 + int(status.Signal())
		}
		if status.Exited() {
			return status.ExitStatus()
		}
	}
	return exitErr.ExitCode()
}
