package etcdlease

import (
	"context"
	"sync"
	"time"

	clientv3 "go.etcd.io/etcd/client/v3"
)

var (
	leaseMu     sync.Mutex
	leaseDayKey int
	leaseDayID  clientv3.LeaseID
)

func GetLease30d(ctx context.Context, etcdLease clientv3.Lease) (clientv3.LeaseID, error) {
	leaseMu.Lock()
	defer leaseMu.Unlock()

	y, m, d := time.Now().Date()
	dayKey := y*10000 + int(m)*100 + d

	if leaseDayKey == dayKey {
		return leaseDayID, nil
	}

	lease, err := etcdLease.Grant(ctx, int64((30 * 24 * time.Hour).Seconds()))
	if err != nil {
		return 0, err
	}

	leaseDayID = lease.ID
	leaseDayKey = dayKey

	return lease.ID, nil
}
