package de.effigenix.domain.masterdata.customer;

/**
 * Rohe Eingabe zum Erzeugen eines Customer.
 * Wird vom Application Layer aus dem Command gebaut und an Customer.create() übergeben.
 * Das Aggregate ist verantwortlich für Validierung und VO-Konstruktion.
 *
 * @param name              Pflicht
 * @param type              Pflicht (Enum)
 * @param phone             Pflicht (Teil von ContactInfo)
 * @param email             Optional
 * @param contactPerson     Optional
 * @param street            Pflicht (billingAddress ist Pflicht-Invariante)
 * @param houseNumber       Optional
 * @param postalCode        Optional
 * @param city              Pflicht
 * @param country           Pflicht (ISO 3166-1 alpha-2)
 * @param paymentDueDays    Optional
 * @param paymentDescription Optional
 */
public record CustomerDraft(
        String name,
        CustomerType type,
        String phone,
        String email,
        String contactPerson,
        String street,
        String houseNumber,
        String postalCode,
        String city,
        String country,
        Integer paymentDueDays,
        String paymentDescription
) {}
