using ApiTerceiroSimulador.Code.Integration;
using ApiTerceiroSimulador.Models;
using ApiTerceiroSimulador.Models.OpenDelivery;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace ApiTerceiroSimulador.Controllers
{
    [Authorize]
    [Route("api/[controller]")]
    [ApiController]
    [Produces("application/json")]
    public class InfoOrderDetailController : ControllerBase
    {
        private readonly IntegrationService srvIntegracao;

        public InfoOrderDetailController()
        {
            srvIntegracao = new IntegrationService();
        }

        /// <summary>
        /// Método para receber os detalhes do pedido armazenado no PDV
        /// </summary>
        /// <remarks>
        /// Este endpoint recebe os detalhes do pedido armazenado no PDV que foram requisitados através do evento "ORDER_DETAILS_REQUESTED".
        /// <para>
        ///     Deverá ser utilizado no campo <i>"URL para enviar os detalhes do pedido (POST)"</i>.
        /// </para>
        /// </remarks>
        /// <param name="orderDetail">Modelo contendo as informações do pedido</param>
        /// <returns>Resultado da operação</returns>
        [HttpPost]
        public RequestResult Post([FromBody] OrderDetail orderDetail)
        {
            RequestResult result;
            string msg;

            try
            {
                if (orderDetail != null)
                {
                    srvIntegracao.RemoveEventByType(orderDetail.Id, "ORDER_DETAILS_REQUESTED");
                    msg = $"{orderDetail.Id} enviado com sucesso.";
                    result = new RequestResult(0, msg);
                }
                else
                {
                    msg = $"Order Detail incorreto.";
                    result = new RequestResult(5, msg);
                }
            }
            catch (Exception ex)
            {
                msg = ex.Message;
                result = new RequestResult(500, "Ocorreu um erro ao receber os detalhes do pedido.");
            }

            Console.WriteLine($"{DateTime.Now} - {msg}");

            return result;
        }
    }
}
