package services

import (
	"context"
	"log"
	"os"

	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/gridfs"
	"go.mongodb.org/mongo-driver/mongo/options"
)

// MongoDB bağlantısını yapar
func ConnectMongoDB() (*mongo.Client, *mongo.Database, error) {
	clientOptions := options.Client().ApplyURI(os.Getenv("MONGODB_URI"))
	client, err := mongo.Connect(context.Background(), clientOptions)
	if err != nil {
		log.Fatalf("MongoDB bağlantısı başarısız: %v", err)
		return nil, nil, err
	}

	db := client.Database(os.Getenv("MONGODB_DB"))
	return client, db, nil
}

// GridFS yükleme fonksiyonu
func UploadFileToGridFS(db *mongo.Database, filename string, fileData []byte) (string, error) {
	bucket, err := gridfs.NewBucket(db)
	if err != nil {
		return "", err
	}

	uploadStream, err := bucket.OpenUploadStream(filename)
	if err != nil {
		return "", err
	}
	defer uploadStream.Close()

	_, err = uploadStream.Write(fileData)
	if err != nil {
		return "", err
	}

	return uploadStream.FileID.(string), nil
}
