package de.assecutor.votianlt.model;

import lombok.Data;

/**
 * Speichert das Ergebnis einer Adressvalidierung. Wird verwendet, um zu merken,
 * ob eine Adresse bereits validiert wurde und ob sie gültig ist.
 */
@Data
public class AddressValidationResult {

    private final String addressType; // "pickup" oder "delivery"
    private final String street;
    private final String houseNumber;
    private final String zip;
    private final String city;

    private boolean valid;
    private String formattedAddress;
    private double latitude;
    private double longitude;
    private String validationMessage;

    public AddressValidationResult(String addressType, String street, String houseNumber, String zip, String city) {
        this.addressType = addressType;
        this.street = street;
        this.houseNumber = houseNumber;
        this.zip = zip;
        this.city = city;
        this.valid = false;
    }

    /**
     * Erstellt einen eindeutigen Schlüssel für diese Adresse
     */
    public String getAddressKey() {
        return String.format("%s|%s|%s|%s|%s", addressType, normalize(street), normalize(houseNumber), normalize(zip),
                normalize(city));
    }

    private String normalize(String value) {
        return value != null ? value.trim().toLowerCase() : "";
    }

    /**
     * Prüft, ob diese Validierung für die angegebenen Adressdaten gilt
     */
    public boolean matches(String street, String houseNumber, String zip, String city) {
        return normalize(this.street).equals(normalize(street))
                && normalize(this.houseNumber).equals(normalize(houseNumber))
                && normalize(this.zip).equals(normalize(zip)) && normalize(this.city).equals(normalize(city));
    }
}
