package fikoyt_json

import (
	"encoding/json"
	"fmt"
	FikoYTMap "server/sistem/fikoyt_map"

	"github.com/gofiber/fiber/v3"
)

func AraIsleyici() fiber.Handler {
	return func(c fiber.Ctx) error {
		var raw interface{}
		var err error

		// Öncelik req_body parametresinde, yoksa body
		input := []byte(c.FormValue("req_body"))
		if len(input) == 0 {
			input = c.BodyRaw()
		}
		// Debug amaçlı gelen body'i yazdır

		// Eğer veri hâlâ boşsa
		if len(input) == 0 {
			c.Locals("json", nil)
			return c.Next()
		}

		// JSON parse işlemi
		err = json.Unmarshal(input, &raw)
		if err != nil {
			fmt.Println("JSON Parse Hatası:", err)
			c.Locals("json", nil)
			return c.Next()
		}
		// Gelen veriye göre tür işlemi
		switch val := raw.(type) {
		case map[string]interface{}:
			c.Locals("json", FikoYTMap.FikoYTMap(val))

		case []interface{}:

			var result []interface{}
			for _, item := range val {
				if m, ok := item.(map[string]interface{}); ok {
					result = append(result, FikoYTMap.FikoYTMap(m))
				} else {
					result = append(result, item)
				}
			}
			c.Locals("json", result)

		default:
			// Diğer her şey doğrudan
			c.Locals("json", val)
		}
		fmt.Println("Gelen Body:", result)
		return c.Next()
	}
}
