package repository

import (
	"context"
)

type RecommendationRepository interface {
	GetUserVirtualGameInteractions(ctx context.Context, userID string) ([]UserGameInteraction, error)
}

type recommendationRepo struct {
	store *Store
}

func NewRecommendationRepository(store *Store) RecommendationRepository {
	return &recommendationRepo{store: store}
}

func (r *recommendationRepo) GetUserVirtualGameInteractions(ctx context.Context, userID string) ([]UserGameInteraction, error) {
	var interactions []UserGameInteraction
	query := `SELECT game_id, interaction_type, timestamp FROM virtual_game_interactions WHERE user_id = $1 ORDER BY timestamp DESC LIMIT 100`

	rows, err := r.store.conn.Query(ctx, query, userID)
	if err != nil {
		return nil, err
	}
	defer rows.Close()

	for rows.Next() {
		var u UserGameInteraction
		if err := rows.Scan(&u.GameID, &u.InteractionType, &u.Timestamp); err != nil {
			return nil, err
		}
		interactions = append(interactions, u)
	}

	if rows.Err() != nil {
		return nil, rows.Err()
	}

	return interactions, nil
}

type UserGameInteraction struct {
	GameID          string
	InteractionType string // e.g., "view", "bet", "like"
	Timestamp       string
}
