package user

import (
	context "context"

	"github.com/tidbcloud/tiinf/monitor/tilog"
	"go.uber.org/zap"

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

type LandingActionFilter struct {
	UserIDs       []entity.ID
	TargetIDs     []entity.ID
	TargetActions []entity.UserTargetAction
}

func (d *UserDao) ListUserLandingActions(ctx context.Context, tx *gorm.DB, filter LandingActionFilter) ([]entity.UserLandingAction, error) {
	var objs []entity.UserLandingAction

	qs := entity.NewUserLandingActionQuerySet(tx)

	if len(filter.UserIDs) > 0 {
		qs = qs.UserIDIn(filter.UserIDs...)
	}

	if len(filter.TargetActions) > 0 {
		qs = qs.TargetActionIn(filter.TargetActions...)
	}
	if len(filter.TargetIDs) > 0 {
		qs = qs.TargetIDIn(filter.TargetIDs...)
	}

	qs = qs.OrderDescByCreatedAt()
	err := qs.All(&objs)
	if err != nil {
		return nil, err
	}
	tilog.Info(ctx, "ListUserLandingActions ", zap.Any("result", objs), zap.Any("filter", filter))
	return objs, nil
}

func (d *UserDao) CreateUserLandingAction(ctx context.Context, tx *gorm.DB, newUser *entity.UserLandingAction) error {
	err := tx.Create(newUser).Error
	if err != nil {
		return err
	}

	return nil
}
