package utils

import (
	"os/exec"
	"path"
	"time"

	"github.com/animenotifier/arn"
	"github.com/fatih/color"
)

// JobInfo gives you information about a background job.
type JobInfo struct {
	Name         string
	LastStarted  time.Time
	LastFinished time.Time
}

// IsRunning tells you whether the given job is running or not.
func (job *JobInfo) IsRunning() bool {
	return job.LastStarted.After(job.LastFinished)
}

// Start will start the job.
func (job *JobInfo) Start() error {
	cmd := exec.Command(path.Join(arn.Root, "jobs", job.Name, job.Name))
	err := cmd.Start()

	if err != nil {
		return err
	}

	job.LastStarted = time.Now()

	// Wait for job finish in another goroutine
	go func() {
		err := cmd.Wait()

		if err != nil {
			color.Red("Job '%s' encountered an error: %s", job.Name, err.Error())
		}

		job.LastFinished = time.Now()
	}()

	return nil
}