' Custom expression builder so ASPX can use <%$ EnvConnectionStrings:SuperbowlConnectionString %>
' to get the connection string from env (SecureConfig) when Web.config is not populated.
' Uses same fallback as db: config first if non-empty, then SecureConfig (env).

Imports System.CodeDom
Imports System.Web.Compilation
Imports System.Web.Configuration
Imports System.Configuration

Namespace RGBC_Forecast

    Public Class EnvConnectionStringsExpressionBuilder
        Inherits System.Web.Compilation.ExpressionBuilder

        Public Overrides Function EvaluateExpression(
            targetObject As Object,
            entry As System.Web.UI.BoundPropertyEntry,
            parsedData As Object,
            context As System.Web.Compilation.ExpressionBuilderContext) As Object
            Dim connectionName As String = entry.Expression.Trim()
            Return GetConnectionStringForExpression(connectionName)
        End Function

        Public Overrides Function GetCodeExpression(
            entry As System.Web.UI.BoundPropertyEntry,
            parsedData As Object,
            context As System.Web.Compilation.ExpressionBuilderContext) As CodeExpression
            Dim connectionName As String = entry.Expression.Trim()
            Return New CodePrimitiveExpression(GetConnectionStringForExpression(connectionName))
        End Function

        ''' <summary>
        ''' Returns connection string: config value if non-empty, else SecureConfig (env).
        ''' Matches db.GetConnectionString() behavior so ASPX and code use same source.
        ''' </summary>
        Private Shared Function GetConnectionStringForExpression(connectionName As String) As String
            Dim cs As ConnectionStringSettings = WebConfigurationManager.ConnectionStrings(connectionName)
            If cs IsNot Nothing AndAlso Not String.IsNullOrEmpty(cs.ConnectionString) Then
                Return cs.ConnectionString
            End If
            Return Global.RGBC_Forecast.RGBC_Forecast.SecureConfig.GetConnectionString(connectionName)
        End Function
    End Class

End Namespace
