Namespace Params
    Public Class ProfileData
        Public Guid As Integer
        Public Regex As String
        Public Name As String
        Public Comment As String
        Public ProfileType As Integer

        Public Processes As List(Of ProcessData)
        Public Windows As List(Of WindowData)
        Public Controls As List(Of ControlData)

        Public CountDocs As Integer = 0
        Public CountData As Integer = 0

        Public IsMatched As Boolean = False
        Public IsCatchAll As Boolean = False

        Public MatchedProcessID As Integer = 0
        Public MatchedWindowID As Integer = 0
        Public MatchedControlID As Integer = 0

        Public SelectCommand As String

        Public ErrorMessage As String = ""

        Public Overrides Function Equals(obj As Object) As Boolean
            Return Guid = DirectCast(obj, ProfileData).Guid
        End Function

        Public Overrides Function GetHashCode() As Integer
            Return Guid.ToString.GetHashCode()
        End Function
    End Class

    Public Class ProcessData
        Public Guid As Integer
        Public PROFILE_ID As Integer
        Public ProcessName As String
        Public IsMatched As Boolean = False

        Public Overrides Function Equals(obj As Object) As Boolean
            Return Guid = DirectCast(obj, ProcessData).Guid
        End Function

        Public Overrides Function GetHashCode() As Integer
            Return Guid.ToString.GetHashCode()
        End Function
    End Class
    Public Class WindowData
        Public Guid As Integer
        Public WindowProcessID As Integer
        Public Title As String
        Public Regex As String
        Public Sequence As Integer
        Public IsMatched As Boolean = False

    End Class
    Public Class ControlData
        Public Guid As Integer
        Public WindowId As Integer
        Public Description As String
        Public Regex As String
        Public AutomationId As String
        Public ControlName As String
        Public ProcessName As String
        Public IsMatched As Boolean = False
        Public TopLeft As ControlBounds
        Public TopRight As ControlBounds
        Public BottomLeft As ControlBounds
        Public BottomRight As ControlBounds
    End Class
    Public Class ControlBounds
        Public Top As Integer
        Public Bottom As Integer
        Public Left As Integer
        Public Right As Integer
    End Class
End Namespace