package config

import (
	"os"
)

type Config struct {
	DBHost      string
	DBPort      string
	DBUser      string
	DBPassword  string
	DBName      string
	JWTSecret   string
	ServerPort  string
	UploadPath  string
	LogLevel    string
	Environment string `yaml:"environment" env:"ENVIRONMENT" default:"development"`
	AppPort     string
	CORS struct {
        AllowedOrigins []string `yaml:"allowed_origins" env:"CORS_ALLOWED_ORIGINS"`
    } `yaml:"cors"`
    
    RateLimit struct {
        Enabled          bool `yaml:"enabled" env:"RATE_LIMIT_ENABLED" default:"false"`
        RequestsPerSecond int `yaml:"requests_per_second" env:"RATE_LIMIT_REQUESTS" default:"100"`
    } `yaml:"rate_limit"`
}

func Load() *Config {
	return &Config{
		DBHost:      getEnv("DB_HOST", "localhost"),
		DBPort:      getEnv("DB_PORT", "5432"),
		DBUser:      getEnv("DB_USER", "postgres"),
		DBPassword:  getEnv("DB_PASSWORD", "postgres"),
		DBName:      getEnv("DB_NAME", "db_yal"),
		JWTSecret:   getEnv("JWT_SECRET", "secret"),
		ServerPort:  getEnv("SERVER_PORT", "8080"),
		UploadPath:  getEnv("UPLOAD_PATH", "./storage/uploads"),
		LogLevel:    getEnv("LOG_LEVEL", "debug"),
		Environment: getEnv("ENVIRONMENT", "development"),
		AppPort:     getEnv("APP_PORT", "8088"),
	}
}

func getEnv(key, defaultValue string) string {
	if value := os.Getenv(key); value != "" {
		return value
	}
	return defaultValue
}
