// internal/config/config.go
package config

import (
	"os"
	"strings"

	"github.com/joho/godotenv"
)

// Config almacena la configuración de la aplicación
type Config struct {
	// Database settings
	DBHost     string
	DBPort     string
	DBUser     string
	DBPassword string
	DBName     string

	// Kafka settings
	KafkaBrokers         []string
	KafkaConsumerGroupID string
	KafkaInputTopic      string
	KafkaTopicEstado     string
	KafkaTopicAnular     string
	KafkaResultTopic     string
	KafkaDLQTopic        string

	// SOAP settings
	SoapServiceURL string

	// Email settings
	SMTPHost    string
	SMTPPort    string
	SMTPUser    string
	SMTPPass    string
	NotifyEmail string

	// Logging settings
	LogDir        string
	LogFilename   string
	LogMaxSize    int
	LogMaxBackups int
	LogMaxAge     int
	LogCompress   bool

	// App settings
	ServerPort  string
	MaxRetries  int
	WorkerCount int
}

// LoadConfig carga la configuración desde variables de entorno o archivo .env
func LoadConfig() (*Config, error) {
	// Intentar cargar .env si existe
	godotenv.Load()

	return &Config{
		// Database settings
		DBHost:     getEnv("DB_HOST", "localhost"),
		DBPort:     getEnv("DB_PORT", "5432"),
		DBUser:     getEnv("DB_USER", "postgres"),
		DBPassword: getEnv("DB_PASSWORD", "postgres"),
		DBName:     getEnv("DB_NAME", "facturacion"),

		// Kafka settings
		KafkaBrokers:         strings.Split(getEnv("KAFKA_BOOTSTRAP_SERVERS", "localhost:9092"), ","),
		KafkaConsumerGroupID: getEnv("KAFKA_CONSUMER_GROUP_ID", "facturacion-consumer"),
		KafkaInputTopic:      getEnv("KAFKA_INPUT_TOPIC", "FACTURACION"),
		KafkaTopicEstado:     getEnv("KAFKA_TOPIC_ESTADO", "FACTURACION_ESTADO"),
		KafkaTopicAnular:     getEnv("KAFKA_TOPIC_ANULAR", "FACTURACION_ANULAR"),
		KafkaResultTopic:     getEnv("KAFKA_RESULT_TOPIC", "FACTURACION_RESULTADOS"),
		KafkaDLQTopic:        getEnv("KAFKA_DLQ_TOPIC", "FACTURACION_DLQ"),

		// SOAP settings
		SoapServiceURL: getEnv("SOAP_SERVICE_URL", "http://siat.servicio.gob.bo/facturacion-service"),

		// Email settings
		SMTPHost:    getEnv("SMTP_HOST", ""),
		SMTPPort:    getEnv("SMTP_PORT", ""),
		SMTPUser:    getEnv("SMTP_USER", ""),
		SMTPPass:    getEnv("SMTP_PASS", ""),
		NotifyEmail: getEnv("NOTIFY_EMAIL", ""),

		// Logging settings
		LogDir:        getEnv("LOG_DIR", "./logs"),
		LogFilename:   getEnv("LOG_FILENAME", "consumer.log"),
		LogMaxSize:    10, // MB
		LogMaxBackups: 5,
		LogMaxAge:     30, // días
		LogCompress:   true,

		// App settings
		ServerPort:  getEnv("SERVER_PORT", "7778"),
		MaxRetries:  3,
		WorkerCount: 10,
	}, nil
}

// getEnv obtiene valor de variable de entorno con valor por defecto
func getEnv(key, defaultValue string) string {
	value := os.Getenv(key)
	if value == "" {
		return defaultValue
	}
	return value
}

//package config
//
//import (
//	"context"
//	"encoding/json"
//	"encoding/xml"
//	"errors"
//	"fmt"
//	"os"
//	"path/filepath"
//	"strconv"
//	"strings"
//	"sync"
//	"sync/atomic"
//	"time"
//
//	"github.com/joho/godotenv"
//)
//
//// Config almacena la configuración de la aplicación
//type Config struct {
//	// Database settings
//	DBHost     string
//	DBPort     string
//	DBUser     string
//	DBPassword string
//	DBName     string
//
//	// Kafka settings
//	KafkaBrokers         []string
//	KafkaConsumerGroupID string
//	KafkaInputTopic      string
//	KafkaTopicEstado     string
//	KafkaTopicAnular     string
//	KafkaResultTopic     string
//	KafkaDLQTopic        string
//
//	// SOAP settings
//	SoapServiceURL string
//
//	// Email settings
//	SMTPHost    string
//	SMTPPort    string
//	SMTPUser    string
//	SMTPPass    string
//	NotifyEmail string
//
//	// Logging settings
//	LogDir        string
//	LogFilename   string
//	LogMaxSize    int
//	LogMaxBackups int
//	LogMaxAge     int
//	LogCompress   bool
//
//	// App settings
//	ServerPort  string
//	MaxRetries  int
//	WorkerCount int
//}
//
//// LoadConfig carga la configuración desde variables de entorno o archivo .env
//func LoadConfig() (*Config, error) {
//	// Intentar cargar .env si existe
//	godotenv.Load()
//
//	return &Config{
//		// Database settings
//		DBHost:     getEnv("DB_HOST", "localhost"),
//		DBPort:     getEnv("DB_PORT", "5432"),
//		DBUser:     getEnv("DB_USER", "postgres"),
//		DBPassword: getEnv("DB_PASSWORD", "postgres"),
//		DBName:     getEnv("DB_NAME", "facturacion"),
//
//		// Kafka settings
//		KafkaBrokers:         strings.Split(getEnv("KAFKA_BOOTSTRAP_SERVERS", "localhost:9092"), ","),
//		KafkaConsumerGroupID: getEnv("KAFKA_CONSUMER_GROUP_ID", "facturacion-consumer"),
//		KafkaInputTopic:      getEnv("KAFKA_INPUT_TOPIC", "FACTURACION"),
//		KafkaTopicEstado:     getEnv("KAFKA_TOPIC_ESTADO", "FACTURACION_ESTADO"),
//		KafkaTopicAnular:     getEnv("KAFKA_TOPIC_ANULAR", "FACTURACION_ANULAR"),
//		KafkaResultTopic:     getEnv("KAFKA_RESULT_TOPIC", "FACTURACION_RESULTADOS"),
//		KafkaDLQTopic:        getEnv("KAFKA_DLQ_TOPIC", "FACTURACION_DLQ"),
//
//		// SOAP settings
//		SoapServiceURL: getEnv("SOAP_SERVICE_URL", "http://siat.servicio.gob.bo/facturacion-service"),
//
//		// Email settings
//		SMTPHost:    getEnv("SMTP_HOST", ""),
//		SMTPPort:    getEnv("SMTP_PORT", ""),
//		SMTPUser:    getEnv("SMTP_USER", ""),
//		SMTPPass:    getEnv("SMTP_PASS", ""),
//		NotifyEmail: getEnv("NOTIFY_EMAIL", ""),
//
//		// Logging settings
//		LogDir:        getEnv("LOG_DIR", "./logs"),
//		LogFilename:   getEnv("LOG_FILENAME", "consumer.log"),
//		LogMaxSize:    1, // MB
//		LogMaxBackups: 5,
//		LogMaxAge:     30, // días
//		LogCompress:   true,
//
//		// App settings
//		ServerPort:  getEnv("SERVER_PORT", "7778"),
//		MaxRetries:  3,
//		WorkerCount: 10,
//	}, nil
//}
//
//// getEnv obtiene valor de variable de entorno con valor por defecto
//func getEnv(key, defaultValue string) string {
//	value := os.Getenv(key)
//	if value == "" {
//		return defaultValue
//	}
//	return value
//}
