package fiko_mongo

import (
	"context"
	"log"
	"time"

	"github.com/gofiber/fiber/v2"
	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

func Init(app *fiber.App) {
	// MongoDB bağlantı URL'si
	databaseURL := "mongodb://127.0.0.1:8001/"
	ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
	client, err := mongo.Connect(ctx, options.Client().ApplyURI(databaseURL))
	if err != nil {
		log.Fatal(err)
	}

	// MongoDB koleksiyonundan veri almak
	collection := client.Database("fikoyt").Collection("hareketler")

	// Pagination parametreleri: Limit ve Skip
	limit := int64(10) // 10 döküman getir
	skip := int64(0)   // İlk 0 dökümanı atla (yani baştan başla)

	// Find sorgusuna limit ve skip parametrelerini ekleyerek verileri alıyoruz
	findOptions := options.Find()
	findOptions.SetLimit(limit)
	findOptions.SetSkip(skip)

	cursor, err := collection.Find(ctx, bson.D{}, findOptions)
	if err != nil {
		log.Fatal(err)
	}
	defer cursor.Close(ctx)

	// Verileri tutacak bir dilim
	var results []bson.M

	// Cursor üzerinden her bir dökümanı almak
	for cursor.Next(ctx) {
		var result bson.M
		if err := cursor.Decode(&result); err != nil {
			log.Fatal(err)
		}
		results = append(results, result)
	}

	// Eğer cursor'dan çıkarken hata varsa
	if err := cursor.Err(); err != nil {
		log.Fatal(err)
	}

	// Fiber route: /fikomongo
	app.Get("/fikomongo", func(c *fiber.Ctx) error {
		// JSON verisini döndür
		return c.Status(200).JSON(results)
	})
}
