// Copyright (c) 2020 The Decred developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.

package database

import (
	"encoding/binary"

	bolt "go.etcd.io/bbolt"
)

// GetLastAddressIndex retrieves the last index used to derive a new fee
// address from the fee xpub key.
func (vdb *VspDatabase) GetLastAddressIndex() (uint32, error) {
	var idx uint32
	err := vdb.db.View(func(tx *bolt.Tx) error {
		vspBkt := tx.Bucket(vspBktK)

		idxBytes := vspBkt.Get(lastAddressIndexK)
		if idxBytes == nil {
			return nil
		}

		idx = binary.LittleEndian.Uint32(idxBytes)

		return nil
	})

	return idx, err
}

// SetLastAddressIndex updates the last index used to derive a new fee address
// from the fee xpub key.
func (vdb *VspDatabase) SetLastAddressIndex(idx uint32) error {
	err := vdb.db.Update(func(tx *bolt.Tx) error {
		vspBkt := tx.Bucket(vspBktK)

		idxBytes := make([]byte, 4)
		binary.LittleEndian.PutUint32(idxBytes, idx)

		return vspBkt.Put(lastAddressIndexK, idxBytes)

	})

	return err
}
