package util

import (
	"context"
	"os/exec"
)

type Process struct {
	cmd    *exec.Cmd
	cancel context.CancelFunc
}

func NewProcess(path string, params []string) *Process {
	ctx, cancel := context.WithCancel(context.Background())
	cmd := exec.CommandContext(ctx, path, params...)
	return &Process{
		cmd:    cmd,
		cancel: cancel,
	}
}

func (p *Process) Start() error {
	return p.cmd.Start()
}

func (p *Process) Stop() error {
	p.cancel()
	return p.cmd.Wait()
}