using EventsAppQuest.Web.Producer.Core;
using EventsAppQuest.Web.Producer.Domain;

namespace EventsAppQuest.Web.Producer.Application
{
    /// <summary>
    /// Indicadores do aceite final do hotel: aguardando aceite, aceite concedido, ajuste solicitado, ciclo encerrado, concluído com observações.
    /// </summary>
    public static class HotelFinalAcceptanceIndicatorHelper
    {
        public static string GetAcceptanceLabel(HotelFinalAcceptanceState state)
        {
            if (state == null) return "—";
            switch (state.AcceptanceStatus)
            {
                case HotelFinalAcceptanceStatus.Closed:
                    return "Ciclo encerrado";
                case HotelFinalAcceptanceStatus.Accepted:
                    return "Aceite final concedido";
                case HotelFinalAcceptanceStatus.Rejected:
                    return "Entrega rejeitada";
                case HotelFinalAcceptanceStatus.NeedsAdjustment:
                    return "Ajuste final solicitado";
                case HotelFinalAcceptanceStatus.PendingReview:
                default:
                    return "Aguardando aceite final do hotel";
            }
        }

        /// <summary>Indicador curto para o hotel (status do aceite e ciclo).</summary>
        public static string GetHotelAcceptanceIndicator(string orderId)
        {
            var state = HotelFinalAcceptanceStore.GetState(orderId);
            if (state == null)
                return HotelFinalAcceptanceController.CanHotelReviewFinal(orderId) ? "Aguardando aceite final do hotel" : "—";
            if (state.IsOrderCycleClosed)
                return "Ciclo encerrado";
            if (state.AcceptanceStatus == HotelFinalAcceptanceStatus.Accepted)
                return "Aceite final concedido";
            if (state.AcceptanceStatus == HotelFinalAcceptanceStatus.Rejected)
                return "Rejeitado";
            if (state.AcceptanceStatus == HotelFinalAcceptanceStatus.NeedsAdjustment)
                return "Ajuste final solicitado";
            return "Aguardando aceite final do hotel";
        }

        /// <summary>Indicador para o produtor (o que o hotel fez).</summary>
        public static string GetProducerAcceptanceIndicator(string orderId)
        {
            var state = HotelFinalAcceptanceStore.GetState(orderId);
            if (state == null)
                return HotelFinalAcceptanceController.CanHotelReviewFinal(orderId) ? "Aguardando aceite final do hotel" : "—";
            if (state.IsOrderCycleClosed)
                return "Ciclo encerrado";
            if (state.AcceptanceStatus == HotelFinalAcceptanceStatus.Accepted)
                return "Aceite final concedido pelo hotel";
            if (state.AcceptanceStatus == HotelFinalAcceptanceStatus.Rejected)
                return "Entrega rejeitada pelo hotel";
            if (state.AcceptanceStatus == HotelFinalAcceptanceStatus.NeedsAdjustment)
                return "Ajuste final solicitado pelo hotel";
            return "Aguardando aceite final do hotel";
        }

        /// <summary>Concluído com observações: aceite com notas ou ajuste solicitado.</summary>
        public static bool HasObservations(HotelFinalAcceptanceState state)
        {
            return state != null && !string.IsNullOrWhiteSpace(state.HotelAcceptanceNotes);
        }
    }
}
