using System.Threading.Tasks; using Campaign_Tracker.Server.Models; using Microsoft.EntityFrameworkCore; namespace Campaign_Tracker.Server.Services; public class MunicipalityAddressService : IMunicipalityAddressService { private readonly ApplicationDbContext _context; public MunicipalityAddressService(ApplicationDbContext context) { _context = context; } public async Task> GetAddressesAsync(int municipalityId) { return await _context.MunicipalityAddresses .Where(a => a.MunicipalityId == municipalityId) .OrderByDescending(a => a.EffectiveDate) .ToListAsync(); } public async Task GetAddressAsync(int id) { return await _context.MunicipalityAddresses.FindAsync(id); } public async Task CreateAddressAsync(MunicipalityAddress address) { // Mark previous addresses as not current var existingCurrent = await _context.MunicipalityAddresses .Where(a => a.MunicipalityId == address.MunicipalityId && a.IsCurrent) .FirstOrDefaultAsync(); if (existingCurrent != null) { existingCurrent.IsCurrent = false; existingCurrent.UpdatedAt = DateTime.UtcNow; } address.IsCurrent = true; address.CreatedAt = DateTime.UtcNow; address.UpdatedAt = DateTime.UtcNow; _context.MunicipalityAddresses.Add(address); await _context.SaveChangesAsync(); return address; } public async Task UpdateAddressAsync(int id, MunicipalityAddress address) { var existingAddress = await _context.MunicipalityAddresses.FindAsync(id); if (existingAddress == null) return null; // Mark previous addresses as not current var existingCurrent = await _context.MunicipalityAddresses .Where(a => a.MunicipalityId == existingAddress.MunicipalityId && a.IsCurrent && a.Id != id) .FirstOrDefaultAsync(); if (existingCurrent != null) { existingCurrent.IsCurrent = false; existingCurrent.UpdatedAt = DateTime.UtcNow; } existingAddress.AddressType = address.AddressType; existingAddress.Street = address.Street; existingAddress.City = address.City; existingAddress.State = address.State; existingAddress.ZipCode = address.ZipCode; existingAddress.EffectiveDate = address.EffectiveDate; existingAddress.IsCurrent = true; existingAddress.UpdatedAt = DateTime.UtcNow; await _context.SaveChangesAsync(); return existingAddress; } public async Task DeleteAddressAsync(int id) { var address = await _context.MunicipalityAddresses.FindAsync(id); if (address == null) return false; _context.MunicipalityAddresses.Remove(address); await _context.SaveChangesAsync(); return true; } }