using System;
using System.Collections.Generic;

namespace EventsAppQuest.Domain.Models
{
    /// <summary>
    /// Resultado da validação da composição da proposta (itens x slots).
    /// Armazenado em memória no projeto para exibição na UI.
    /// </summary>
    [Serializable]
    public class CompositionValidationResult
    {
        /// <summary>Status geral da validação.</summary>
        public CompositionValidationStatus Status { get; set; }

        /// <summary>Avisos (ex.: excesso em slot).</summary>
        public List<ValidationMessage> Warnings { get; set; } = new List<ValidationMessage>();

        /// <summary>Inconsistências (ex.: item sem slot, slot incompatível).</summary>
        public List<ValidationMessage> Inconsistencies { get; set; } = new List<ValidationMessage>();
    }

    /// <summary>Status da validação da composição.</summary>
    [Serializable]
    public enum CompositionValidationStatus
    {
        Valid = 0,
        HasWarnings = 1,
        Invalid = 2
    }

    /// <summary>Mensagem de validação (aviso ou inconsistência).</summary>
    [Serializable]
    public class ValidationMessage
    {
        /// <summary>Código curto (ex.: ItemSemSlot, SlotIncompativel).</summary>
        public string Code { get; set; }

        /// <summary>Mensagem legível.</summary>
        public string Message { get; set; }

        /// <summary>Id do item relacionado (opcional).</summary>
        public string ItemId { get; set; }

        /// <summary>Id do slot relacionado (opcional).</summary>
        public string SlotId { get; set; }
    }
}
