# Environment and Configuration Utilities
# Reusable functions for loading environment variables and configuration

# Load environment variables from .env file
export def load_env_from_file [] {
    let env_file = ".env"
    if ($env_file | path exists) {
        let env_content = (open $env_file | lines)
        for line in $env_content {
            # Skip comments and empty lines
            if not ($line | str trim | str starts-with "#") and not ($line | str trim | is-empty) {
                # Parse KEY=VALUE format with variable expansion
                if ($line | str contains "=") {
                    let parts = ($line | split column "=" key value)
                    if ($parts | length) >= 2 {
                        let key = ($parts | first | get key | str trim)
                        let value = ($parts | first | get value | str trim)
                        # Remove quotes and expand ${VARIABLE} patterns
                        let clean_value = ($value | str replace -a '"' '' | str replace -a "'" '')
                        let expanded_value = expand_env_variables $clean_value
                        # Set environment variable
                        load-env {($key): $expanded_value}
                    }
                }
            }
        }
    }
}

# Expand ${VARIABLE} patterns in environment values
export def expand_env_variables [value: string] {
    mut result = $value

    # Simple ${VAR} expansion
    let var_pattern = '\\$\\{([A-Z_][A-Z0-9_]*)\\}'
    let matches = ($result | parse --regex $var_pattern)

    for match in $matches {
        if "capture0" in ($match | columns) {
            let var_name = ($match | get capture0)
            if $var_name in $env {
                let var_value = ($env | get $var_name)
                $result = ($result | str replace $"\\${${var_name}}" $var_value)
            }
        }
    }

    $result
}

# Get environment variable with fallback
export def get_env_var [var_name: string, default_value: string] {
    if $var_name in $env {
        return ($env | get $var_name)
    }
    return $default_value
}

# Get enabled content types from content-kinds.toml
export def get_enabled_content_types [content_dir: string] {
    let content_kinds_file = $"($content_dir)/content-kinds.toml"

    if not ($content_kinds_file | path exists) {
        print $"(ansi yellow)⚠️  Warning: content-kinds.toml not found, using defaults(ansi reset)"
        return ["blog", "recipes"]
    }

    mut enabled_types = []
    let toml_content = open $content_kinds_file

    if "content_kinds" in $toml_content {
        for content_kind in $toml_content.content_kinds {
            if $content_kind.enabled {
                let dir_path = $"($content_dir)/($content_kind.directory)"
                if ($dir_path | path exists) {
                    $enabled_types = ($enabled_types | append $content_kind.directory)
                    print $"(ansi green)✅ Content type '($content_kind.name)' -> '($content_kind.directory)' enabled(ansi reset)"
                } else {
                    print $"(ansi yellow)⚠️  WARNING: Content type '($content_kind.name)' enabled but directory missing - SKIPPING(ansi reset)"
                }
            }
        }
    }

    if ($enabled_types | is-empty) {
        print $"(ansi yellow)⚠️  No enabled content types, using defaults(ansi reset)"
        return ["blog", "recipes"]
    }

    $enabled_types
}
