package FikoYTCevap

import (
	"fmt"
	FikoYTCevapCls "server/sistem/fikoyt_ctx/fikoyt_cevap_cls"
	"strings"

	"github.com/gofiber/fiber/v3"
)

func Ayarla(app *fiber.App) {
	app.Use(KureselAraIsleyici)
}

// Middleware: Tüm isteklere bakar, `fapi` ile başlıyorsa özel format uygular
func KureselAraIsleyici(c fiber.Ctx) error {
	// Eğer path `/fapi` ile başlamıyorsa, doğrudan devam et
	if c.Method() != fiber.MethodPost {
		return c.Next()
	}

	if c.Context().IsBodyStream() {
		return c.Next()
	}

	if !strings.HasPrefix(c.Path(), "/fapi") || !strings.HasPrefix(c.Path(), "/uyar") {
		return c.Next()
	}

	// Ana handler'ı çağır
	err := c.Next()
	if err != nil {
		fmt.Println(err.Error())
	}
	cevap := c.Locals("Cevap").(*FikoYTCevapCls.FikoYTCevap)

	// Ana handler'dan dönen yanıt ve durum kodu
	statusCode := c.Response().StatusCode()
	originalResponse := string(c.Response().Body())

	if cevap.Durum.Kodu == nil {
		cevap.Durum.Kodu = &statusCode
	}

	cevap.Durum.Tamamlandi = statusCode >= 200 && statusCode < 300
	cevap.Durum.Mesaj = FikoYTCevapCls.DurumMesajiAl(cevap.Durum.Kodu)

	cevap.Durum.Hata = false
	if len(cevap.Durum.Hatalar) > 0 {
		cevap.Durum.Hata = true
	}

	if cevap.Sonuc == nil {
		cevap.Sonuc = originalResponse
	}
	// JSON yanıtını döndür
	return c.JSON(cevap)
}
