using System; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using System.Linq; using System.Threading.Tasks; namespace BD_empresa.Data { public class AccessService(string connectionString) : IClienteRepository { private readonly string _connectionString = connectionString; public async Task> SearchClientesAsync(string query) { return await Task.Run(() => { var clientes = new List(); using (var connection = new OleDbConnection(_connectionString)) { connection.Open(); string sql = @"SELECT Gestao, Cliente, Unidade, CNPJ_CPF, Codigo_Instalacao, Razao_Social FROM Dados_cadastrais WHERE CNPJ_CPF LIKE ? OR Codigo_Instalacao LIKE ? OR Razao_Social LIKE ? OR Cliente LIKE ?"; using var cmd = new OleDbCommand(sql, connection); string likeQuery = $"%{query}%"; cmd.Parameters.AddWithValue("?", likeQuery); cmd.Parameters.AddWithValue("?", likeQuery); cmd.Parameters.AddWithValue("?", likeQuery); cmd.Parameters.AddWithValue("?", likeQuery); using var reader = cmd.ExecuteReader(); while (reader.Read()) { clientes.Add(new ClienteSmart { Gestao = reader["Gestao"].ToString(), Cliente = reader["Cliente"].ToString(), Unidade = reader["Unidade"].ToString(), CNPJ_CPF = reader["CNPJ_CPF"].ToString(), Codigo_Instalacao = reader["Codigo_Instalacao"].ToString(), Razao_Social = reader["Razao_Social"].ToString() }); } } // Unifica clientes por CNPJ, retorna no máximo 3 return clientes .GroupBy(c => c.CNPJ_CPF) .Select(g => g.First()) .Take(3) .ToList(); }); } public async Task> GetAllClientesAsync() { return await Task.Run(() => { var clientes = new List(); using (var connection = new OleDbConnection(_connectionString)) { connection.Open(); string sql = "SELECT Gestao, Cliente, Unidade, CNPJ_CPF, Codigo_Instalacao, Razao_Social FROM Dados_cadastrais"; using var cmd = new OleDbCommand(sql, connection); using var reader = cmd.ExecuteReader(); while (reader.Read()) { clientes.Add(new ClienteSmart { Gestao = reader["Gestao"].ToString(), Cliente = reader["Cliente"].ToString(), Unidade = reader["Unidade"].ToString(), CNPJ_CPF = reader["CNPJ_CPF"].ToString(), Codigo_Instalacao = reader["Codigo_Instalacao"].ToString(), Razao_Social = reader["Razao_Social"].ToString() }); } } // Unifica clientes por CNPJ return clientes .GroupBy(c => c.CNPJ_CPF) .Select(g => g.First()) .Take(3) .ToList(); }); } } }