package FikoYTMap

import (
	"fmt"
	"reflect"

	"github.com/gofiber/fiber/v3"
)

type FikoYTMap fiber.Map

func (f FikoYTMap) BosAlanlar() []string {
	var bosAlanlar []string
	val := reflect.ValueOf(f)

	// Pointer ise değerini al
	if val.Kind() == reflect.Ptr {
		val = val.Elem()
	}

	// Struct değilse çık
	if val.Kind() != reflect.Struct {
		return bosAlanlar
	}

	// Struct'ın alanlarını dolaş
	typ := val.Type()
	for i := 0; i < val.NumField(); i++ {
		field := val.Field(i)
		fieldType := typ.Field(i)

		// String pointer kontrolü
		if field.Kind() == reflect.Ptr && !field.IsNil() && field.Elem().Kind() == reflect.String {
			if field.Elem().Len() == 0 {
				bosAlanlar = append(bosAlanlar, fieldType.Name)
			}
			continue
		}

		// String alan kontrolü
		if field.Kind() == reflect.String && field.Len() == 0 {
			bosAlanlar = append(bosAlanlar, fieldType.Name)
			continue
		}

		// Pointer kontrolü
		if field.Kind() == reflect.Ptr && field.IsNil() {
			bosAlanlar = append(bosAlanlar, fieldType.Name)
			continue
		}

		// Map kontrolü
		if field.Kind() == reflect.Map && field.Len() == 0 {
			bosAlanlar = append(bosAlanlar, fieldType.Name)
		}
	}

	return bosAlanlar
}
func (f FikoYTMap) TumAlanlarDolumu() bool {
	for key, value := range f {
		if value == nil {
			fmt.Printf("Alan boş veya nil: %s\n", key)
			return false
		}
		v := reflect.ValueOf(value)
		if v.Kind() == reflect.String && v.Len() == 0 {
			fmt.Printf("Alan boş string: %s\n", key)
			return false
		}
	}
	return true
}
