Imports System.Data.OleDb
Imports System.Configuration.ConfigurationSettings
Imports Mediatheek.data

Public Class clsAlbumDA
    '-- Enumerations --
    '-- Fields --
    '-- Constructors --
    Private Sub New()
    End Sub
    '-- Methoden --

#Region "Get Albums"

    Public Shared Function GetAlbums() As ArrayList
        'Hier maken we een functie GetAlbums om alle Albums op te roepen en te steken in een arraylist 
        'Hier worden alle records ingelezen van de tabel locaties ( albumid, albumnaam, productiejaar, productiehuis, genreid, AlbumId, foto)
        Try
            '1. Select en Pars aanmaken
            Dim sSQL As String = "SELECT * FROM tblAlbum"

            '3. De gegevens selecteren en naar een DataTable overbrengen
            Dim oDataTable As DataTable = clsDatabase.GetDT(sSQL)

            '4. De gegegevens van de DataTable naar 
            '   een ArrayList van album-objecten overbrengen
            Dim arlAlbums As ArrayList = New ArrayList
            Dim oRow As DataRow
            For Each oRow In oDataTable.Rows

                Dim sAlbumId, sAlbumNaam, sProductieJaar, sProductieHuis, sAantalLiedjes, sGenreId, sLocatieId, sFoto As String

                sAlbumId = Convert.ToString(oRow.Item("AlbumID"))
                sAlbumNaam = Convert.ToString(oRow.Item("AlbumNaam"))
                sProductieJaar = Convert.ToString(oRow.Item("ProductieJaar"))
                sProductieHuis = Convert.ToString(oRow.Item("ProductieHuis"))
                sAantalLiedjes = Convert.ToString(oRow.Item("AantalLiedjes"))
                sGenreId = Convert.ToString(oRow.Item("GenreId"))
                sLocatieId = Convert.ToString(oRow.Item("LocatieId"))
                sFoto = Convert.ToString(oRow.Item("Foto"))

                Dim oAlbum As New clsAlbum(sAlbumId, sAlbumNaam, sProductieJaar, sProductieHuis, sAantalLiedjes, sGenreId, sLocatieId, sFoto)
                arlAlbums.Add(oAlbum)
            Next

            '5. De ArrayList returnen
            Return arlAlbums

        Catch ex As Exception
            Debug.WriteLine(ex.Message)

            Throw
        End Try
    End Function

    Public Shared Function GetAlbumByID(ByVal sAlbumID As String) As ArrayList
        'Hier maken we een functie GetAlbums om alle Albums op te roepen en te steken in een arraylist  met gegeven locatiid

        Try
            '1. Select en Pars aanmaken
            Dim sSQL As String = "SELECT * FROM tblAlbum WHERE AlbumID=" & sAlbumID

            '3. De gegevens selecteren en naar een DataTable overbrengen
            Dim oDataTable As DataTable = clsDatabase.GetDT(sSQL)

            '4. De gegegevens van de DataTable naar 
            '   een ArrayList van album-objecten overbrengen
            Dim arlAlbums As ArrayList = New ArrayList
            Dim oRow As DataRow

            For Each oRow In oDataTable.Rows

                Dim sAlbumNaam, sProductieJaar, sProductieHuis, sAantalLiedjes, sGenreId, sLocatieId, sFoto As String

                sAlbumID = Convert.ToString(oRow.Item("AlbumID"))
                sAlbumNaam = Convert.ToString(oRow.Item("AlbumNaam"))
                sProductieJaar = Convert.ToString(oRow.Item("ProductieJaar"))
                sProductieHuis = Convert.ToString(oRow.Item("ProductieHuis"))
                sAantalLiedjes = Convert.ToString(oRow.Item("AantalLiedjes"))
                sGenreId = Convert.ToString(oRow.Item("GenreId"))
                sLocatieId = Convert.ToString(oRow.Item("LocatieId"))
                sFoto = Convert.ToString(oRow.Item("Foto"))
                Dim oAlbum As New clsAlbum(sAlbumID, sAlbumNaam, sProductieJaar, sProductieHuis, sAantalLiedjes, sGenreId, sLocatieId, sFoto)
                arlAlbums.Add(oAlbum)


            Next

            Return arlAlbums


        Catch ex As Exception
            Debug.WriteLine(ex.Message)
            MsgBox("fout bij album opzoeken op id")

            Throw
        End Try
    End Function

    Public Shared Function GetAlbumsByLocatieID(ByVal sLocatieID As String) As ArrayList
        'Hier maken we een functie GetAlbums om alle Albums op te roepen en te steken in een arraylist  met gegeven locatiid

        Try
            '1. Select en Pars aanmaken
            Dim sSQL As String = "SELECT * FROM tblAlbum WHERE LocatieID=" & sLocatieID

            '3. De gegevens selecteren en naar een DataTable overbrengen
            Dim oDataTable As DataTable = clsDatabase.GetDT(sSQL)

            '4. De gegegevens van de DataTable naar 
            '   een ArrayList van album-objecten overbrengen
            Dim arlAlbums As ArrayList = New ArrayList
            Dim oRow As DataRow
            For Each oRow In oDataTable.Rows

                Dim sAlbumId, sAlbumNaam, sProductieJaar, sProductieHuis, sAantalLiedjes, sGenreId, sFoto As String

                sAlbumId = Convert.ToString(oRow.Item("AlbumID"))
                sAlbumNaam = Convert.ToString(oRow.Item("AlbumNaam"))
                sProductieJaar = Convert.ToString(oRow.Item("ProductieJaar"))
                sProductieHuis = Convert.ToString(oRow.Item("ProductieHuis"))
                sAantalLiedjes = Convert.ToString(oRow.Item("AantalLiedjes"))
                sGenreId = Convert.ToString(oRow.Item("GenreId"))
                'sLocatieId = Convert.ToString(oRow.Item("LocatieId"))
                sFoto = Convert.ToString(oRow.Item("Foto"))

                Dim oAlbum As New clsAlbum(sAlbumId, sAlbumNaam, sProductieJaar, sProductieHuis, sAantalLiedjes, sGenreId, sLocatieID, sFoto)
                arlAlbums.Add(oAlbum)
            Next

            '5. De ArrayList returnen
            Return arlAlbums

        Catch ex As Exception
            Debug.WriteLine(ex.Message)

            Throw
        End Try
    End Function

    Public Shared Function GetAlbumsByGenreID(ByVal sGenreID As String) As ArrayList
        'Hier maken we een functie GetAlbums om alle Albums op te roepen en te steken in een arraylist  met gegeven locatiid

        Try
            '1. Select en Pars aanmaken
            Dim sSQL As String = "SELECT * FROM tblAlbum WHERE GenreID=" & sGenreID

            '3. De gegevens selecteren en naar een DataTable overbrengen
            Dim oDataTable As DataTable = clsDatabase.GetDT(sSQL)

            '4. De gegegevens van de DataTable naar 
            '   een ArrayList van album-objecten overbrengen
            Dim arlAlbums As ArrayList = New ArrayList
            Dim oRow As DataRow
            For Each oRow In oDataTable.Rows

                Dim sAlbumId, sAlbumNaam, sProductieJaar, sProductieHuis, sAantalLiedjes, sLocatieId, sFoto As String

                sAlbumId = Convert.ToString(oRow.Item("AlbumID"))
                sAlbumNaam = Convert.ToString(oRow.Item("AlbumNaam"))
                sProductieJaar = Convert.ToString(oRow.Item("ProductieJaar"))
                sProductieHuis = Convert.ToString(oRow.Item("ProductieHuis"))
                sAantalLiedjes = Convert.ToString(oRow.Item("AantalLiedjes"))
                'sGenreId = Convert.ToString(oRow.Item("GenreId"))
                sLocatieId = Convert.ToString(oRow.Item("LocatieId"))
                sFoto = Convert.ToString(oRow.Item("Foto"))

                Dim oAlbum As New clsAlbum(sAlbumId, sAlbumNaam, sProductieJaar, sProductieHuis, sAantalLiedjes, sGenreId, sLocatieID, sFoto)
                arlAlbums.Add(oAlbum)
            Next

            '5. De ArrayList returnen
            Return arlAlbums

        Catch ex As Exception
            Debug.WriteLine(ex.Message)

            Throw
        End Try
    End Function

    Public Shared Function GetAlbumByNaam(ByVal sGekozenNaam As String) As ArrayList
        'Hier maken we een functie GetAlbums om alle Albums op te roepen en te steken in een arraylist  met gegeven locatiid

        Try
            '1. Select en Pars aanmaken
            Dim sSQL As String = "SELECT * FROM tblAlbum WHERE AlbumNaam='" + sGekozenNaam + "'   "

            '3. De gegevens selecteren en naar een DataTable overbrengen
            Dim oDataTable As DataTable = clsDatabase.GetDT(sSQL)

            '4. De gegegevens van de DataTable naar 
            '   een ArrayList van album-objecten overbrengen
            Dim arlAlbums As ArrayList = New ArrayList
            Dim oRow As DataRow
            For Each oRow In oDataTable.Rows

                Dim sAlbumId, sAlbumNaam, sProductieJaar, sProductieHuis, sAantalLiedjes, sGenreId, sLocatieId, sFoto As String

                sAlbumId = Convert.ToString(oRow.Item("AlbumID"))
                sAlbumNaam = Convert.ToString(oRow.Item("AlbumNaam"))
                sProductieJaar = Convert.ToString(oRow.Item("ProductieJaar"))
                sProductieHuis = Convert.ToString(oRow.Item("ProductieHuis"))
                sAantalLiedjes = Convert.ToString(oRow.Item("AantalLiedjes"))
                sGenreId = Convert.ToString(oRow.Item("GenreId"))
                sLocatieId = Convert.ToString(oRow.Item("LocatieId"))
                sFoto = Convert.ToString(oRow.Item("Foto"))

                Dim oAlbum As New clsAlbum(sAlbumId, sAlbumNaam, sProductieJaar, sProductieHuis, sAantalLiedjes, sGenreId, sLocatieId, sFoto)
                arlAlbums.Add(oAlbum)
            Next

            '5. De ArrayList returnen
            Return arlAlbums

        Catch ex As Exception
            Debug.WriteLine(ex.Message)

            Throw
        End Try
    End Function

    Public Shared Function GetAlbumsPerGenre() As ArrayList
        Dim arlAlbumInfo As New ArrayList
        Dim sSQL As String = "SELECT tblUitvoering.GenreId, Count(tblUitvoering.GenreId) AS Aantal FROM(tblUitvoering) GROUP BY tblUitvoering.GenreId"

        Dim oDT As New DataTable
        oDT = clsDatabase.GetDT(sSQL)

        For Each oDR As DataRow In oDT.Rows
            Dim oAlbumInfo As New clsGenre

            oAlbumInfo.GenreNaam = oDR.Item("GenreID")
            oAlbumInfo.GenreID = oDR.Item("Aantal")

            arlAlbumInfo.Add(oAlbumInfo)
        Next

        Return arlAlbumInfo
    End Function

    Public Shared Function GetOntleningByAlbumId2(ByVal sAlbumId As String) As clsAlbum
        Dim oAlbum As clsAlbum
        For Each oAlbum In GetAlbums()

            If oAlbum.AlbumId = sAlbumId Then
                Return oAlbum

            End If
        Next
    End Function
#End Region

#Region "Voeg Album Toe"


    Public Shared Sub VoegAlbumToe(ByVal oAlbum As clsAlbum)
        
        Dim sValue As String
        sValue = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString")
        Dim oCon As System.Data.OleDb.OleDbConnection
        oCon = New OleDbConnection(sValue)
        oCon.Open()

        Dim oCommand As OleDbCommand
        oCommand = oCon.CreateCommand()

        oAlbum.AlbumID = getVolgendAlbumId()
        Dim sInsert As String
        sInsert = "INSERT INTO tblAlbum(AlbumId,AlbumNaam,ProductieJaar,ProductieHuis,AantalLiedjes,GenreID,LocatieID,Foto)VALUES(?,?,?,?,?,?,?,?)"

        Dim oPar1 As New OleDbParameter("@AlbumId", oAlbum.AlbumID)
        Dim oPar2 As New OleDbParameter("@AlbumNaam", oAlbum.AlbumNaam)
        Dim oPar3 As New OleDbParameter("@ProductieJaar", oAlbum.ProductieJaar)
        Dim oPar4 As New OleDbParameter("@ProductieHuis", oAlbum.Productiehuis)
        Dim oPar5 As New OleDbParameter("@AantalLiedjes", oAlbum.AantalLiedjes)
        Dim oPar6 As New OleDbParameter("@GenreId", oAlbum.GenreID)
        Dim oPar7 As New OleDbParameter("@LocatieId", oAlbum.LocatieID)
        Dim oPar8 As New OleDbParameter("@Foto", oAlbum.Foto)

        oCommand.CommandText = sInsert
        oCommand.Parameters.Add(oPar1)
        oCommand.Parameters.Add(oPar2)
        oCommand.Parameters.Add(oPar3)
        oCommand.Parameters.Add(oPar4)
        oCommand.Parameters.Add(oPar5)
        oCommand.Parameters.Add(oPar6)
        oCommand.Parameters.Add(oPar7)
        oCommand.Parameters.Add(oPar8)
        oCommand.ExecuteNonQuery()
        oCon.Close()
    End Sub

    Public Shared Function getVolgendAlbumId() As Integer
        'hier wordt een nieuw albumid gezocht ( het hoogste getal )
        Try
            Dim sSQL As String = "SELECT MAX(AlbumId) FROM tblAlbum"
            Dim iMaxId As Integer
            Try
                iMaxId = Convert.ToInt32(clsDatabase.ExecuteScalar(sSQL))
            Catch
                iMaxId = 0
            End Try
            Return iMaxId + 1
        Finally
        End Try
    End Function

#End Region

#Region "Wijzig Albums"

    Public Shared Function WijzigAlbum(ByVal oAlbum As clsAlbum)

        Dim oCon As OleDbConnection
        Try
            Dim sValue As String
            sValue = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString")
            Dim oCon2 As System.Data.OleDb.OleDbConnection
            oCon2 = New OleDbConnection(sValue)
            oCon2.Open()

            Dim oCommand2 As OleDbCommand
            oCommand2 = oCon2.CreateCommand()
            Dim sInsert As String
           
            sInsert = "UPDATE tblAlbum SET AlbumNaam=?, ProductieJaar=?, Productiehuis=?, AantalLiedjes=?, GenreID=?, LocatieID=? WHERE AlbumId=?"


            Dim oPar1 As New OleDbParameter("@AlbumNaam", oAlbum.AlbumNaam)
            Dim oPar2 As New OleDbParameter("@ProductieJaar", oAlbum.ProductieJaar)
            Dim oPar3 As New OleDbParameter("@Productiehuis", oAlbum.Productiehuis)
            Dim oPar4 As New OleDbParameter("@AantalLiedjes", oAlbum.AantalLiedjes)
            Dim oPar5 As New OleDbParameter("@GenreID", oAlbum.GenreID)
            Dim oPar6 As New OleDbParameter("@LocatieID", oAlbum.LocatieID)
            Dim oPar7 As New OleDbParameter("@AlbumId", oAlbum.AlbumID)
            oCommand2.CommandText = sInsert
            oCommand2.Parameters.Add(oPar1)
            oCommand2.Parameters.Add(oPar2)
            oCommand2.Parameters.Add(oPar3)
            oCommand2.Parameters.Add(oPar4)
            oCommand2.Parameters.Add(oPar5)
            oCommand2.Parameters.Add(oPar6)
            oCommand2.Parameters.Add(oPar7)
            oCommand2.ExecuteNonQuery()
            oCon2.Close()


        Catch ex As Exception
            Debug.WriteLine(ex.Message)
            MsgBox("fout bij wijzigen album", MsgBoxStyle.Critical, "fout")
            Throw
        Finally
            '4. Connectie vrijgeven
            If Not oCon Is Nothing Then
                oCon.Close()
                oCon.Dispose()
            End If
        End Try
    End Function


#End Region

#Region "Verwijder Albums"
    Public Shared Function VerwijderAlbum(ByVal sAlbumId As String)
        Dim oCon As OleDbConnection
        Try
            Dim sValue As String
            sValue = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString")
            Dim oCon3 As System.Data.OleDb.OleDbConnection
            oCon3 = New OleDbConnection(sValue)
            oCon3.Open()

            Dim oCommand3 As OleDbCommand
            oCommand3 = oCon3.CreateCommand()
            Dim sInsert As String
           

            sInsert = "DELETE FROM tblAlbum WHERE AlbumId=?"

            Dim oPar As New OleDbParameter("@AlbumId", sAlbumId)
            oCommand3.CommandText = sInsert
            oCommand3.Parameters.Add(oPar)


            oCommand3.ExecuteNonQuery()
            oCon3.Close()
        Catch ex As Exception
            Debug.WriteLine(ex.Message)
            Throw
        Finally

            If Not oCon Is Nothing Then
                oCon.Close()
                oCon.Dispose()
            End If
        End Try
    End Function

    Public Shared Function VerwijderOntleningenByAlbumID(ByVal sAlbumId As String)
        Dim oCon As OleDbConnection
        Try
            Dim sValue As String
            sValue = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString")
            Dim oCon4 As System.Data.OleDb.OleDbConnection
            oCon4 = New OleDbConnection(sValue)
            oCon4.Open()

            Dim oCommand4 As OleDbCommand
            oCommand4 = oCon4.CreateCommand()
            Dim sInsert As String
            

            sInsert = "DELETE FROM tblAlbum_Ontlener WHERE AlbumID=" & sAlbumId


            oCommand4.CommandText = sInsert


            '3. Uitvoeren op de DB
            oCommand4.ExecuteNonQuery()
            oCon4.Close()
        Catch ex As Exception
            Debug.WriteLine(ex.Message)
            Throw
        Finally
            '4. Connectie vrijgeven
            If Not oCon Is Nothing Then
                oCon.Close()
                oCon.Dispose()
            End If
        End Try
    End Function
#End Region

  
End Class
