Imports System.IO

Public Class ClsUsuariosEnroladosListar
    Implements IUsuariosEnroladosListar

    Private conexion As IPrixusConexion
    Public Sub New(conexion As IPrixusConexion)
        Me.conexion = conexion
    End Sub

    Public Function Listar() As List(Of DeviceUserData) Implements IUsuariosEnroladosListar.Listar
        Dim resultado As New List(Of DeviceUserData)

        Try
            'Logica de creación de usuario
            Dim bdResultado As DataTable = conexion.ObtenerDataTable("SELECT * FROM usuariosHuellasEnroladas", New List(Of SqlClient.SqlParameter)())

            For Each f As DataRow In bdResultado.Rows
                Dim stream = New MemoryStream(CType(f("huella"), Byte()))
                Dim template = New DPFP.Template(stream)

                If resultado.Exists(Function(value As DeviceUserData) value.IdUser = CInt(f("idUsuario"))) Then
                    Dim index = resultado.FindIndex(Function(value As DeviceUserData) value.IdUser = CInt(f("idUsuario")))
                    resultado(index).Templates(CInt(f("dedo")) - 1) = template
                Else
                    Dim datosNuevos = New DeviceUserData()
                    datosNuevos.IdUser = f("idUsuario")
                    datosNuevos.EnrolledFingersMask = CInt(f("mascara"))
                    datosNuevos.FalseAcceptRate = CBool(f("tasaAceptacion"))
                    datosNuevos.IsFeatureSetMatched = CBool(f("esEquivalente"))
                    datosNuevos.IsEventHandlerSucceeds = CBool(f("esExitoso"))
                    datosNuevos.Templates(CInt(f("dedo")) - 1) = template
                    resultado.Add(datosNuevos)
                End If
            Next
        Catch ex As Exception
            Console.WriteLine(vbNewLine + ex.Message)
        Finally
            conexion.CerrarBD()
        End Try

        Return resultado
    End Function
End Class
