<?php

declare(strict_types=1);

namespace App\Shared\Domain\Contract;

/**
 * Contrat minimal d'une adresse de Supplier (M2 Commercial) exposable a un autre
 * module sans couplage direct (regle ABSOLUE n°1). Mappe vers
 * App\Module\Commercial\Domain\Entity\SupplierAddress via `resolve_target_entities`.
 *
 * Implemente par App\Module\Commercial\Domain\Entity\SupplierAddress. Utilise
 * comme type-hint des relations ORM cross-module (ex: CarrierPrice.supplierSupplyAddress,
 * M4). La serialisation passe par le read-group de l'entite concrete
 * (supplier_address:read), pas par cette interface.
 */
interface SupplierAddressInterface
{
    public function getId(): ?int;

    /**
     * Fournisseur parent de l'adresse. Expose le lien inverse sans coupler au
     * module Commercial : permet a un autre module de verifier l'appartenance
     * d'une adresse a un fournisseur (ex: CarrierPrice, RG-4.11 — l'adresse
     * d'appro doit appartenir au fournisseur choisi). Retour covariant ?Supplier.
     */
    public function getSupplier(): ?SupplierInterface;
}
