package FikoYTCevap

import (
	"fmt"
	FikoYTCevapCls "server/sistem/fikoyt_ctx/fikoyt_cevap_cls"
	FikoYTHata "server/sistem/fikoyt_ctx/fikoyt_hata"
	"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("Burası--_>" + 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
	}

	if err == nil {
		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
		}
	} else {
		cevap.Durum.Tamamlandi = false
		cevap.Durum.Mesaj = err.Error()
		cevap.Durum.Hatalar.Ekle(FikoYTHata.YeniFikoYTHataKomutCalistirilirkenHata(c.Path(), nil).FikoYTHata)
		cevap.Durum.Hata = true
	}
	fmt.Println("Burası--_>")
	if cevap.Sonuc == nil {
		cevap.Sonuc = originalResponse
	}
	// JSON yanıtını döndür
	return c.JSON(cevap)
}
