Imports System.IO
Imports System.Collections
Imports System.Runtime.Serialization.Formatters.Binary


Public Class clsBDD

    Private Database As SortedList
    Private al As ArrayList
    Private StreamFile As Stream
    Private Serializer As New BinaryFormatter
    Private Enumerator As IDictionaryEnumerator
    Private Fichier As String



    ' // METHODES PUBLIQUES

    Public Sub New(ByVal fich As String)
        Database = New SortedList()
        al = New ArrayList

        If Not File.Exists(fich) Then
            CreateDirectory(fich)
        End If
        Fichier = fich

        LoadFile()
    End Sub
    Private Sub CreateDirectory(ByVal fich As String)
        If IO.Directory.Exists(fich.Substring(0, fich.LastIndexOf("\"))) = False Then
            IO.Directory.CreateDirectory(fich.Substring(0, fich.LastIndexOf("\")))
        End If

        If Not File.Exists(fich) Then
            File.WriteAllText(fich, "")
        End If
    End Sub
    Public Sub Add(ByRef sVal As ArrayList)
        Database.Add(GetLastID(), sVal)
    End Sub

    Public Property Item(ByVal sKey As String) As Object
        Get
            Return Database.Item(sKey)
        End Get
        Set(ByVal value As Object)
            Database.Item(sKey) = value
        End Set
    End Property
    Public Property Item(ByVal index As Integer) As Object
        Get
            Return Database.Item(Database.GetKey(index))
        End Get
        Set(ByVal value As Object)
            Database.Item(Database.GetKey(index)) = value
        End Set
    End Property

    Public ReadOnly Property Count() As Long
        Get
            Count = Database.Count
        End Get
    End Property
    Public Sub Remove(ByVal sKey As String)
        Database.Remove(sKey)
    End Sub
    Public Function GetLastID() As String
        If Database.Count = 0 Then
            Return 0
        End If

        Dim nb As Integer = 0
        '' RECUPERATION NOMBRE LE PLUS GRAND
        For i As Integer = 0 To Database.Count - 1
            If nb < Database.GetKey(i) Then nb = Database.GetKey(i)
        Next
        Return nb + 1
    End Function
    Public Function GetidRow(ByVal index As Integer)
        Return Database.GetKey(index)
    End Function

    Public Function KeyExists(ByVal sKey As String) As Boolean
        If Database.IndexOfKey(sKey) = -1 Then Return False
        'If Database.IndexOfKey(sKey) = Nothing Then Return False
        Return True
    End Function



    ' // METHODES PRIVEES
    Private Sub LoadFile()
        Try
            StreamFile = File.OpenRead(Fichier)
        Catch
        End Try

        If StreamFile.Length > 0 Then
            Database = CType(Serializer.Deserialize(StreamFile), SortedList)
        Else
            Database = New SortedList
        End If
        StreamFile.Close()
    End Sub
    Public Sub Save()
        File.WriteAllText(Fichier, "")
        StreamFile = File.OpenWrite(Fichier)
        Serializer.Serialize(StreamFile, Database)
        StreamFile.Close()
    End Sub

End Class
