VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "Xdebug"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

'namespace=xvba_modules\Xdebug

Public env As String

'Example of Package Create by XVBA-CLI

Private OS_TMP__FOLDER_PATH As String

Private IMMEDIATE_FOLDER As String

Private IMMEDIATE_FILE As String

Private DEBUG_FILE_PATH As String

Const EMPTY_TYPE = 0
Const NULL_TYPE = 1
Const ERROR_TYPE = 10
Const INTEGER_TYPE = 2
Const LONG_TYPE = 3
Const SINGLE_TYPE = 4
Const DOUBLE_TYPE = 5
Const CURRENCY_TYPE = 6
Const DATE_TYPE = 7
Const DECIMAL_TYPE = 14
Const LONG_LONG_TYPE = 20
Const BOOLEAN_TYPE = 11
Const STRING_TYPE = 8
Const ARRAY_TYPE = 8204
Const OBJECT_TYPE = 9
Const VARIANT_TYPE = 12
Const DATA_OBJECT_TYPE = 13
Private Const MESSAGE_SPACE = "                              "

Public errorSource As String
Public errorTitle As String

'/*
'Flag for Actrive os Deactive VBA Debug.Print
'*/
Public vbaDebugPrintActive As Boolean

Private Sub class_initialize()

     Dim fso  As Object
     Set fso = CreateObject("Scripting.FileSystemObject")
     OS_TMP__FOLDER_PATH = fso.GetSpecialFolder(2)
     IMMEDIATE_FOLDER = "xvba_immediate"
     IMMEDIATE_FILE = "immediate.txt"
     vbaDebugPrintActive = True
     errorSource = ""
     errorTitle = "XVBA: New Error Was Found"
     env = "DEV"

     DEBUG_FILE_PATH = OS_TMP__FOLDER_PATH & "\" & IMMEDIATE_FOLDER & "\" & IMMEDIATE_FILE

End Sub




Public Function printx(inputValue As Variant, Optional messageType As Integer = 1)

     If (env = "DEV") Then
          Dim messageText  As String

          messageText = createOutputMessage(inputValue)

          Call writeDebugFileContent(messageText, messageType)
     End If
End Function

'/*
'Print A Error
'
'*/
Public Function printError()
     If (env = "DEV") Then

          Dim message As String

          message = ErrorHanddler()

          Call writeDebugFileContent(message, 0)

     End If
End Function


'/*
'
'Write Debug ino on File
'
'
'*/
Private Function writeDebugFileContent(messageText, messageType)

     Dim filePath As String
     Dim FileNum As Integer
     Dim PREFIX As String

     filePath = DEBUG_FILE_PATH

     FileNum = FreeFile

     PREFIX = Now & " - "

     Open filePath For Append As #FileNum

     Dim debugMessage As String
     Select Case messageType

      Case 0 'Error Message

          debugMessage = PREFIX & "Error:" & messageText
      Case 1 'Success
          debugMessage = PREFIX & messageText
      Case Else 'No Type Set

          debugMessage = PREFIX & "Info:" & messageText
     End Select

     Print #FileNum, debugMessage

     Close #FileNum

     If (vbaDebugPrintActive) Then

          Debug.Print debugMessage

     End If
End Function


Private Function createOutputMessage(inputValue) As String

     Dim typeOfVar As Integer
     Dim response As String

     typeOfVar = VarType(inputValue)


     'Set Error Source Macro/Function name
     Err.Source = "createOutputMessage"
     Select Case typeOfVar
      Case STRING_TYPE
          response = "String: " & inputValue
      Case INTEGER_TYPE
          response = "Integer: " & CStr(inputValue)
      Case LONG_TYPE
          response = "Long: " & CStr(inputValue)
      Case SINGLE_TYPE
          response = "Single: " & CStr(inputValue)
      Case DOUBLE_TYPE
          response = "Double: " & CStr(inputValue)
      Case CURRENCY_TYPE
          response = "Currenty: " & CStr(inputValue)
      Case DATE_TYPE
          response = "Date: " & CStr(inputValue)
      Case DECIMAL_TYPE
          response = "Decimal: " & CStr(inputValue)
      Case LONG_LONG_TYPE
          response = "LongLong: " & CStr(inputValue)
      Case BOOLEAN_TYPE
          response = "Boolean: " & CStr(inputValue)
      Case ARRAY_TYPE
          response = makeArrayTypeMessage(inputValue)
      Case EMPTY_TYPE
          response = "Empty: "
      Case OBJECT_TYPE
          response = "Object: " & TypeName(inputValue)
      Case NULL_TYPE
          response = "Null: "
      Case ERROR_TYPE
          response = "Error: "
      Case VARIANT_TYPE
          response = "Variant: "
      Case DATA_OBJECT_TYPE
          response = "Data Object: " & TypeName(inputValue)
      Case Else
          response = "Type Not Supported yet please inform xvba developer "
          Debug.Print typeOfVar
          Debug.Print inputValue

     End Select


     createOutputMessage = response

End Function


Private Function makeArrayTypeMessage(inputValue) As String
     Dim nextItem As Variant
     Dim response As String
     Dim message As String

     For Each nextItem In inputValue
          message = createOutputMessage(nextItem)
          response = response & "                              [ " & message & " ]" & vbCrLf
     Next nextItem
     makeArrayTypeMessage = "Array: " & vbCrLf & response
End Function



Private Function ErrorHanddler() As String
     Dim errorDescription As String
     Dim numberDescription As String
     Dim lineError As String
     Dim sourceError As String
     Dim errorTitleMsg As String
     Dim errorSourceMsg As String

     errorTitleMsg = vbCrLf & MESSAGE_SPACE & errorTitle
     errorSourceMsg = vbCrLf & MESSAGE_SPACE & "Error Source: " & errorSource


     Select Case Err.Number
      Case 11
          numberDescription = vbCrLf & MESSAGE_SPACE & "Error Number: " & Err.Number
          lineError = vbCrLf & MESSAGE_SPACE & "Error Line: " & Erl
          errorDescription = vbCrLf & MESSAGE_SPACE & "Error Description: " & Err.Description
      Case Else
          numberDescription = vbCrLf & MESSAGE_SPACE & "Error Number: " & Err.Number
          errorDescription = vbCrLf & MESSAGE_SPACE & "Error Description: " & Err.Description
     End Select


     ErrorHanddler = errorTitleMsg & lineError & errorSourceMsg & numberDescription & errorDescription

End Function
