// Package account_audit 提供账号操作审计日志服务
// 负责记录所有账号管理操作，用于审计追踪和合规要求
package account_audit

import (
	"context"

	"github.com/break/junhong_cmp_fiber/internal/model"
	"github.com/break/junhong_cmp_fiber/pkg/logger"
	"go.uber.org/zap"
)

// AccountOperationLogStore 账号操作日志存储接口
type AccountOperationLogStore interface {
	Create(ctx context.Context, log *model.AccountOperationLog) error
}

// Service 账号审计服务
type Service struct {
	store AccountOperationLogStore
}

// NewService 创建账号审计服务实例
func NewService(store AccountOperationLogStore) *Service {
	return &Service{
		store: store,
	}
}

// LogOperation 记录账号操作日志（异步写入，不阻塞主流程）
func (s *Service) LogOperation(ctx context.Context, log *model.AccountOperationLog) {
	// 异步写入审计日志，不阻塞业务操作
	go func() {
		if err := s.store.Create(context.Background(), log); err != nil {
			// 写入失败只记录错误日志，不影响业务
			logger.GetAppLogger().Error("写入账号操作日志失败",
				zap.Uint("operator_id", log.OperatorID),
				zap.String("operation_type", log.OperationType),
				zap.Error(err))
		}
	}()
}
