package lkgr

import (
	"bytes"
	"context"
	"fmt"
	"regexp"
	"sync"
	"time"

	"go.skia.org/infra/go/common"
	"go.skia.org/infra/go/gitiles"
	"go.skia.org/infra/go/metrics2"
	"go.skia.org/infra/go/sklog"
	"go.skia.org/infra/go/util"
)

var (
	SKIA_REV_REGEX = regexp.MustCompile(".*'skia_revision': '([0-9a-fA-F]{2,40})'.*")
)

// LKGR is a struct used for tracking the Last Known Good Revision of Skia.
type LKGR struct {
	hash string
	mtx  sync.RWMutex
}

// Return an LKGR instance.
func New(ctx context.Context) (*LKGR, error) {
	rv := &LKGR{}
	return rv, rv.Update(ctx)
}

// Return the LKGR.
func (r *LKGR) Get() string {
	r.mtx.RLock()
	defer r.mtx.RUnlock()
	return r.hash
}

// Update LKGR.
func (r *LKGR) Update(ctx context.Context) error {
	var buf bytes.Buffer
	if err := gitiles.NewRepo(common.REPO_CHROMIUM, nil).ReadFile(ctx, "DEPS", &buf); err != nil {
		return err
	}
	m := SKIA_REV_REGEX.FindStringSubmatch(buf.String())
	if m == nil || len(m) != 2 {
		return fmt.Errorf("Unable to find skia_revision in DEPS!")
	}
	r.mtx.Lock()
	defer r.mtx.Unlock()
	r.hash = m[1]
	return nil
}

// Start updating LKGR in a loop.
func (r *LKGR) UpdateLoop(freq time.Duration, ctx context.Context) {
	lv := metrics2.NewLiveness("last_successful_lkgr_update")
	go util.RepeatCtx(freq, ctx, func(ctx context.Context) {
		if err := r.Update(ctx); err != nil {
			sklog.Errorf("Failed to update LKGR: %s", err)
		} else {
			lv.Reset()
		}
	})
}
