namespace Grand.Domain.Common;

public static class AddressExtensions
{
    /// <summary>
    ///     Find an address
    /// </summary>
    /// <param name="source">Source</param>
    /// <param name="firstName">First name</param>
    /// <param name="lastName">Last name</param>
    /// <param name="phoneNumber">Phone number</param>
    /// <param name="email">Email</param>
    /// <param name="faxNumber">Fax number</param>
    /// <param name="company">Company</param>
    /// <param name="address1">Address 1</param>
    /// <param name="address2">Address 2</param>
    /// <param name="city">City</param>
    /// <param name="stateProvinceId">State/province identifier</param>
    /// <param name="zipPostalCode">Zip postal code</param>
    /// <param name="countryId">Country identifier</param>
    /// <returns>Address</returns>
    public static Address FindAddress(this List<Address> source,
        string firstName, string lastName, string phoneNumber,
        string email, string faxNumber, string company, string address1,
        string address2, string city, string stateProvinceId,
        string zipPostalCode, string countryId)
    {
        return source.Find(a =>
            ((string.IsNullOrEmpty(a.FirstName) && string.IsNullOrEmpty(firstName)) || a.FirstName == firstName) &&
            ((string.IsNullOrEmpty(a.LastName) && string.IsNullOrEmpty(lastName)) || a.LastName == lastName) &&
            ((string.IsNullOrEmpty(a.PhoneNumber) && string.IsNullOrEmpty(phoneNumber)) ||
             a.PhoneNumber == phoneNumber) &&
            ((string.IsNullOrEmpty(a.Email) && string.IsNullOrEmpty(email)) || a.Email == email) &&
            ((string.IsNullOrEmpty(a.FaxNumber) && string.IsNullOrEmpty(faxNumber)) || a.FaxNumber == faxNumber) &&
            ((string.IsNullOrEmpty(a.Company) && string.IsNullOrEmpty(company)) || a.Company == company) &&
            ((string.IsNullOrEmpty(a.Address1) && string.IsNullOrEmpty(address1)) || a.Address1 == address1) &&
            ((string.IsNullOrEmpty(a.Address2) && string.IsNullOrEmpty(address2)) || a.Address2 == address2) &&
            ((string.IsNullOrEmpty(a.City) && string.IsNullOrEmpty(city)) || a.City == city) &&
            ((string.IsNullOrEmpty(a.StateProvinceId) && string.IsNullOrEmpty(stateProvinceId)) ||
             a.StateProvinceId == stateProvinceId) &&
            ((string.IsNullOrEmpty(a.ZipPostalCode) && string.IsNullOrEmpty(zipPostalCode)) ||
             a.ZipPostalCode == zipPostalCode) &&
            ((string.IsNullOrEmpty(a.CountryId) && string.IsNullOrEmpty(countryId)) || a.CountryId == countryId));
    }
}