using System.Collections.Generic;
using EventsAppQuest.Domain.Models;

namespace EventsAppQuest.Application.Services
{
    /// <summary>
    /// Contrato para avaliação de compatibilidade e composição: item x slot e validação da proposta.
    /// </summary>
    public interface IPlacementCompatibilityService
    {
        /// <summary>Indica se o item pode ser alocado no slot segundo as regras de compatibilidade.</summary>
        bool CanItemGoInSlot(ShowroomItem item, SpaceLayoutSlot slot);

        /// <summary>Slots compatíveis com o item no espaço, ordenados por preferência (regras).</summary>
        IReadOnlyList<SpaceLayoutSlot> GetCompatibleSlotsForItem(string spaceId, ShowroomItem item);

        /// <summary>Valida a composição atual do projeto (itens sem slot, slot incompatível, excesso, etc.).</summary>
        CompositionValidationResult ValidateComposition(EventProject project);
    }
}
