package security

import (
	"context"
	"sync"

	"github.com/tidbcloud/account/commons/database"

	"github.com/tidbcloud/account/internel/dao/entity"
	securityDao "github.com/tidbcloud/account/internel/dao/security"
	"gorm.io/gorm"
)

type SecuritySvcIface interface {
	CreateAuditLog(ctx context.Context, orgID uint64, userEmail string, content string) (*entity.AuditLog, error)
}

type SecuritySvc struct {
	db          *gorm.DB
	securityDao securityDao.SecurityDaoIface
}

func NewSecuritySvc(db *gorm.DB, securityDao securityDao.SecurityDaoIface) SecuritySvcIface {
	return &SecuritySvc{
		db:          db,
		securityDao: securityDao,
	}
}

var (
	securitySvcInitOnce sync.Once
	securitySvcInstance SecuritySvcIface
)

func GetSecuritySvc() (SecuritySvcIface, error) {
	securitySvcInitOnce.Do(func() {
		securitySvcInstance = NewSecuritySvc(database.DBConn.DB, securityDao.NewDao())
	})
	return securitySvcInstance, nil
}
