using System.Drawing.Printing; using System.Reflection; using Azure; using System.Reflection.Metadata; using Core.Interfaces; using Domain.Entities; using Domain.Generics; using Microsoft.EntityFrameworkCore; using Models.Helpers; using Models.Interfaces; using Models.Models; namespace Core.Services { public class CustomerService: ICustomerDom { #region Declaraciones y Constructor private readonly IPhSCustomerRepository _repository; public CustomerService(IPhSCustomerRepository customerRepository) { _repository = customerRepository ?? throw new ArgumentNullException(nameof(customerRepository)); } #endregion public async Task> GetAllAsync(int page = 1, int pageSize = 50) { try { return await _repository.GetAllAsync(page, pageSize); } catch (Exception ex) { var methodName = MethodBase.GetCurrentMethod()?.Name ?? "UnknownMethod"; throw new Exception($"{methodName} Message: {ex.Message}", ex); } } public async Task GetByIdAsync(int id) { try { return await _repository.GetByIdAsync(id); } catch (Exception ex) { var methodName = MethodBase.GetCurrentMethod()?.Name ?? "UnknownMethod"; throw new Exception($"{methodName} Message: {ex.Message}", ex); } } public async Task CreateAsync(ECustomer entity) { if (entity is null) throw new ArgumentNullException(nameof(entity), "El cliente no puede ser nulo."); if (!entity.AccounttypesId.HasValue) throw new ArgumentException("Debe seleccionar un tipo de cuenta.", nameof(entity.AccounttypesId)); if (entity.PhSCustomerDocuments == null || !entity.PhSCustomerDocuments.Any()) throw new ArgumentException("El cliente debe tener al menos un documento (por ejemplo, CUIT).", nameof(entity.PhSCustomerDocuments)); return await _repository.CreateAsync(entity); } public async Task> SearchAsync( string? name, string? email, string? document, int page = 1, int pageSize = 50) { try { return await _repository.SearchAsync(name, email, document, page, pageSize); } catch (Exception ex) { var methodName = MethodBase.GetCurrentMethod()?.Name ?? "UnknownMethod"; throw new Exception($"{methodName} Message: {ex.Message}", ex); } } public async Task UpdateAsync(ECustomer entity) { if (entity is null) throw new ArgumentNullException(nameof(entity), "El cliente no puede ser nulo."); if (!entity.AccounttypesId.HasValue) throw new ArgumentException("Debe seleccionar un tipo de cuenta.", nameof(entity.AccounttypesId)); if (entity.PhSCustomerDocuments == null || !entity.PhSCustomerDocuments.Any()) throw new ArgumentException("El cliente debe tener al menos un documento (por ejemplo, CUIT).", nameof(entity.PhSCustomerDocuments)); return await _repository.UpdateAsync(entity); } public Task DeleteAsync(int id) { throw new NotImplementedException(); } } }