package main

import (
	"log"
	"time"

	"git.1e99.eu/1e99/wolbodge/devices"
	"git.1e99.eu/1e99/wolbodge/sessions"
)

func DeviceCheck(logger *log.Logger, device devices.Device, wantStatus func() (bool, error), exit <-chan bool) {
	for {
		select {
		case <-exit:
			break
		default:
			status, err := device.Status()
			if err != nil {
				logger.Printf("Failed to fetch device status, waiting 1 minute until next attempt: %s", err)
				time.Sleep(1 * time.Minute)
				continue
			}

			want, err := wantStatus()
			if err != nil {
				logger.Printf("Failed to fetch want status, waiting 1 minute until next attempt: %s", err)
				time.Sleep(1 * time.Minute)
				continue
			}

			if status == want {
				// Don't lock up our single-threaded session storage too much
				time.Sleep(2 * time.Second)
				continue
			}

			err = device.PushPowerButton()
			if err != nil {
				logger.Printf("Failed to push power button, waiting 2 minutes until next attempt: %s", err)
				// Cooldown to not overwhelm the device with start/stop requests
				time.Sleep(2 * time.Minute)
				return
			}

			logger.Printf("Pushed power button")
			time.Sleep(2 * time.Minute)
		}
	}
}

func PruneStorage(logger *log.Logger, storage sessions.Storage, interval time.Duration, exit <-chan bool) {
	for {
		select {
		case <-exit:
			break
		default:
			/*pruned, err := storage.PruneTickets()
			if err != nil {
				logger.Printf("Failed to prune tickets: %s", err)
			}

			logger.Printf("Pruned %d tickets", pruned)
			time.Sleep(interval)*/
		}
	}
}