using System.Net;
using System.Net.Http;
using System.Web.Http;
using PlatezhkaDemoApi.Models;
using PlatezhkaDemoApi.Models.Requests;
using PlatezhkaDemoApi.Models.Responses;

#pragma warning disable 219
#pragma warning disable 162

// ReSharper disable RedundantAssignment
// ReSharper disable HeuristicUnreachableCode

namespace PlatezhkaDemoApi.Controllers
{
    public class PayController : ApiController
    {
        // POST api/pay
        public HttpResponseMessage Post([FromBody]PayCommand command)
        {
            if (!ModelState.IsValid || command == null || command.amount == 0)
                return Request.CreateResponse(HttpStatusCode.BadRequest, command);

            int extTransactionId = 0;
            string comment = "";
            ResponseStatusCode result = ResponseStatusCode.Ok;

            // Здесь записываем в базу поступивший запрос, для того что бы потом разобраться какие запросы к Вам приходили. Уникальный индификатор запроса - $transactionId
            if (true) // Проверяем $login, $password, что бы отсекать чужие запросы
            {
                if (true) // Обязательно нужно проверить(по $payID) платеж в Вашей системе, если платеж оплачен - возвращаем result - 0
                {
                    // Здесь обновляем платеж в Вашей базе, проставляя $payTimestamp, $payID, $amount(В копейках), $terminalId, и помечаем платеж как оплаченный

                    extTransactionId = 12345; // Записываем сюда номер Вашей транзакции.
                    result = ResponseStatusCode.Ok;
                    comment = "Это тестовый платеж"; // Коментарий не обязателен
                }
                else
                {
                    result = ResponseStatusCode.Ok;
                }
            }
            else
            {
                result = ResponseStatusCode.PaymentDeniedByProvider; // Прием платежа запрещен провайдером
            }

            return Request.CreateResponse(HttpStatusCode.OK,
                new CommandResponse(extTransactionId, command.account, result, comment));
        }
    }
}
