Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration

Public NotInheritable Class ErrorLogger
   Private Sub New()
   End Sub

   Public Shared Sub Log(component As String, operation As String, message As String, ex As Exception, userEmail As String)
      Try
         Using con As New SqlConnection(ConfigurationManager.ConnectionStrings("Pernod_ConnectionString").ConnectionString)
            Using cmd As New SqlCommand("[dbo].[ERROR_LOG_spIns]", con)
               cmd.CommandType = CommandType.StoredProcedure

               cmd.Parameters.AddWithValue("@component", component)
               cmd.Parameters.AddWithValue("@operation", operation)
               If String.IsNullOrEmpty(message) Then
                  cmd.Parameters.AddWithValue("@message", CType(DBNull.Value, Object))
               Else
                  cmd.Parameters.AddWithValue("@message", message)
               End If

               Dim exceptionMessage As Object = If(ex Is Nothing, CType(DBNull.Value, Object), CType(ex.Message, Object))
               cmd.Parameters.AddWithValue("@exceptionmessage", exceptionMessage)

               Dim stackTrace As Object = If(ex Is Nothing, CType(DBNull.Value, Object), CType(ex.ToString(), Object))
               cmd.Parameters.AddWithValue("@stacktrace", stackTrace)

               If String.IsNullOrEmpty(userEmail) Then
                  cmd.Parameters.AddWithValue("@useremail", CType(DBNull.Value, Object))
               Else
                  cmd.Parameters.AddWithValue("@useremail", userEmail)
               End If

               con.Open()
               cmd.ExecuteNonQuery()
            End Using
         End Using
      Catch
         ' Avoid secondary failures during error handling
      End Try
   End Sub
End Class
