package ana

import (
	"maps"
	"regexp"
	"time"

	"gogs.inhome.blapointe.com/ana-ledger/src/ledger"
)

func BPIsWithFixedGrowthPrediction(bpis ledger.BPIs, window time.Duration, pattern string, apy float64) (ledger.BPIs, error) {
	last := map[ledger.Currency]struct {
		t string
		v float64
	}{}
	for currency, bpi := range bpis {
		for date, value := range bpi {
			if date > last[currency].t {
				was := last[currency]
				was.t = date
				was.v = value
				last[currency] = was
			}
		}
	}

	result := make(ledger.BPIs)
	p := regexp.MustCompile(pattern)
	for currency, v := range bpis {
		result[currency] = maps.Clone(v)
		if p.MatchString(string(currency)) {
			for _, predictionTime := range predictionTimes(window) {
				k2 := predictionTime.Format("2006-01")
				was := last[currency]
				was.v *= 1.0 + (apy / 12.0)
				result[currency][k2] = was.v
				last[currency] = was
			}
		}
	}
	return result, nil
}
