package config

import (
	"log"
	"os"
	"path/filepath"
	"producer/pkg/utils"

	"github.com/joho/godotenv"
)

// LoadConfig carga la configuración de la aplicación
func LoadConfig() error {
	// Detectar directorio actual para debugging
	cwd, err := os.Getwd()
	if err != nil {
		log.Printf("Error al obtener directorio actual: %v", err)
	} else {
		log.Printf("Directorio actual: %s", cwd)
	}

	// Intentar cargar .env desde la ubicación actual
	if err := godotenv.Load(); err != nil {
		log.Printf("No se pudo cargar .env desde la ubicación actual: %v", err)

		// Intentar cargar desde ubicaciones alternativas
		paths := []string{
			"./.env",
			"../.env",
			"../../.env",
			"../main/.env",
		}

		for _, path := range paths {
			absPath, _ := filepath.Abs(path)
			log.Printf("Intentando cargar .env desde: %s", absPath)
			if err := godotenv.Load(path); err == nil {
				log.Printf("Archivo .env cargado correctamente desde: %s", absPath)
				return nil
			}
		}

		log.Println("Continuando con variables de entorno del sistema")
		return nil
	}

	log.Println("Archivo .env cargado correctamente")
	return nil
}

// PrintConfigValues imprime valores de configuración para verificación
func PrintConfigValues() {
	log.Printf("DB_HOST: %s", utils.GetEnv("DB_HOST", "not set"))
	log.Printf("KAFKA_BOOTSTRAP_SERVERS: %s", utils.GetEnv("KAFKA_BOOTSTRAP_SERVERS", "not set"))
	log.Printf("SERVER_PORT: %s", utils.GetEnv("SERVER_PORT", "not set"))
}
