package main

import (
	"fmt"
	"image/color"
	"io/ioutil"
	"log"
	"math/rand"
	"time"

	"github.com/shayne/hwinfo-streamdeck/pkg/graph"
)

const (
	dev = 40
)

func main() {
	g := graph.NewGraph(72, 72, 0., 100.,
		&color.RGBA{255, 255, 255, 255},
		&color.RGBA{0, 0, 0, 255},
		&color.RGBA{255, 255, 255, 255})
	g.SetLabel(0, "CPU °C", 15, &color.RGBA{183, 183, 183, 255})
	g.SetLabel(1, "5%", 40, &color.RGBA{255, 255, 255, 255})

	data := makeFakeData()
	// data := []float64{
	// 	0., 0., 0., 0., 0.,
	// 	10., 10., 10., 10., 10.,
	// 	20., 20., 20., 20., 20.,
	// 	30., 30., 30., 30., 30.,
	// 	40., 40., 40., 40., 40.,
	// 	50., 50., 50., 50., 50.,
	// 	60., 60., 60., 60., 60.,
	// 	70., 70., 70., 70., 70.,
	// 	80., 80., 80., 80., 80.,
	// 	90., 90., 90., 90., 90.,
	// 	100., 100., 100., 100., 100.,
	// }
	for _, v := range data {
		g.Update(v)
	}
	lastv := data[len(data)-1]

	ticker := time.NewTicker(time.Second)
	for {
		select {
		case <-ticker.C:
			s := rand.NewSource(time.Now().UnixNano())
			r := rand.New(s)
			ndev := r.Intn(dev) - (dev / 2)
			v := lastv + float64(ndev)
			if v > 100 {
				v = 100
			} else if v < 0 {
				v = 0
			}
			fmt.Println(v)
			g.Update(v)
			lastv = v
			bts, err := g.EncodePNG()
			if err != nil {
				log.Fatal("failed to encode png")
			}
			err = ioutil.WriteFile("graph.png", bts, 0644)
			if err != nil {
				log.Fatal("failed to write png")
			}
		}
	}
}

func makeFakeData() []float64 {
	s := rand.NewSource(time.Now().UnixNano())
	r := rand.New(s)
	data := make([]float64, 72)
	v := r.Intn(100)
	lastv := v
	data[0] = float64(v)
	for i := 1; i < 72; i++ {
		ndev := r.Intn(dev) - (dev / 2)
		v = lastv + ndev
		data[i] = float64(v)
	}
	return data
}
