package main

import (
	"context"
	"fmt"
	"sort"

	humanize "github.com/dustin/go-humanize"
)

const processorsFragment = `
    <style type="text/css">
		.table td,th {
			background-color: #eee;
			padding: 0.2em 0.4em 0.2em 0.4em;
		}
		.table th {
			background-color: #c0c0c0;
		}
		.table {
			background-color: #fff;
			border-spacing: 0.2em;
			margin-left: auto;
			margin-right: auto;
		}
	</style>
	<div>
	<table class="table">
		<tr>
      		<th>Name</th>
			<th>Status</th>
      		<th>Last Run</th>
			<th>Next Run</th>
		</tr>
		{{range .Processors }}
		<tr>
			<td>{{ .Name }}</td>
			{{ if ne .Status "OK" }}
			<td style="background-color: #ff3030;">{{ .Status }}</td>
			{{ else }}
			<td>{{ .Status }}</td>
			{{ end }}
			<td>{{ .LastRun }}</td>
			<td>{{ .NextRun }}</td>
		</tr>
		{{end}}
	</table>
	</div>
`

type processorsFragmentEntry struct {
	Name    string
	Status  string
	LastRun string
	NextRun string
}

func (s *service) statuszProcessors(ctx context.Context) interface{} {
	s.processorsMu.RLock()
	defer s.processorsMu.RUnlock()

	res := struct {
		Processors []*processorsFragmentEntry
	}{
		Processors: make([]*processorsFragmentEntry, len(s.processors)),
	}

	i := 0
	for _, processor := range s.processors {
		lastRun := "never"
		if processor.lastRun != nil {
			lastRun = humanize.Time(*processor.lastRun)
		}
		nextRun := "any second now"
		if nr := processor.nextRun(); nr != nil {
			nextRun = humanize.Time(*nr)
		}
		status := "OK"
		if processor.lastErr != nil {
			status = fmt.Sprintf("%v", processor.lastErr)
		}
		res.Processors[i] = &processorsFragmentEntry{
			Name:    processor.name,
			Status:  status,
			LastRun: lastRun,
			NextRun: nextRun,
		}
		i += 1
	}

	sort.Slice(res.Processors, func(i, j int) bool { return res.Processors[i].Name < res.Processors[j].Name })

	return res
}
