package handlers

import (
	"log"
	"project/internal/services"
	"project/internal/socketio"

	"github.com/gofiber/fiber/v2"
	"go.mongodb.org/mongo-driver/mongo"
)

// Dosya yükleme işleyicisi
func UploadFile(db *mongo.Database, socket *socketio.Server) fiber.Handler {
	return func(c *fiber.Ctx) error {
		// Dosya al
		file, err := c.FormFile("file")
		if err != nil {
			log.Println("Dosya alınamadı:", err)
			return c.Status(fiber.StatusBadRequest).SendString("Dosya alınamadı")
		}

		// Dosyayı okuma
		fileData, err := file.Open()
		if err != nil {
			log.Println("Dosya okunamadı:", err)
			return c.Status(fiber.StatusInternalServerError).SendString("Dosya okunamadı")
		}
		defer fileData.Close()

		// Dosyayı GridFS'ye yükle
		fileID, err := services.UploadFileToGridFS(db, file.Filename, fileData)
		if err != nil {
			log.Println("Dosya yüklenemedi:", err)
			return c.Status(fiber.StatusInternalServerError).SendString("Dosya yüklenemedi")
		}

		// WebSocket'e dosya yükleme bildirimi gönder
		socket.BroadcastToNamespace("/", "file_uploaded", fileID)

		return c.JSON(fiber.Map{"file_id": fileID})
	}
}
