package tlsrptdb

import (
	"sync"

	"github.com/mjl-/bstore"

	"github.com/mjl-/mox/mlog"
	"github.com/mjl-/mox/mox-"
)

var (
	ReportDBTypes = []any{TLSReportRecord{}}
	ReportDB      *bstore.DB
	mutex         sync.Mutex

	// Accessed directly by tlsrptsend.
	ResultDBTypes = []any{TLSResult{}, TLSRPTSuppressAddress{}}
	ResultDB      *bstore.DB
)

// Init opens and possibly initializes the databases.
func Init() error {
	if _, err := reportDB(mox.Shutdown); err != nil {
		return err
	}
	if _, err := resultDB(mox.Shutdown); err != nil {
		return err
	}
	return nil
}

// Close closes the database connections.
func Close() {
	log := mlog.New("tlsrptdb", nil)
	if ResultDB != nil {
		err := ResultDB.Close()
		log.Check(err, "closing result database")
		ResultDB = nil
	}

	mutex.Lock()
	defer mutex.Unlock()
	if ReportDB != nil {
		err := ReportDB.Close()
		log.Check(err, "closing report database")
		ReportDB = nil
	}
}