package fikoyt_json

import (
	"encoding/json"
	FikoYTMap "server/sistem/fikoyt_map"

	"github.com/gofiber/fiber/v3"
)

func AraIsleyici() fiber.Handler {
	return func(c fiber.Ctx) error {
		var raw interface{}

		input := []byte(c.FormValue("req_body"))
		if len(input) == 0 {
			input = c.BodyRaw()
		}

		if len(input) == 0 {
			c.Locals("json", nil)
			c.Locals("jsonTip", "Diger")
			return c.Next()
		}

		err := json.Unmarshal(input, &raw)
		if err != nil {
			c.Locals("json", nil)
			c.Locals("jsonTip", "Diger")
			return c.Next()
		}

		switch val := raw.(type) {
		case map[string]interface{}:
			c.Locals("json", FikoYTMap.FikoYTMap(val))
			c.Locals("jsonTip", "Object")
		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("jsonArray", result)
			c.Locals("json", nil)
			c.Locals("jsonTip", "Array")
		default:
			c.Locals("json", val)
			c.Locals("jsonTip", "Diger")
		}

		return c.Next()
	}
}
