using System.Collections.Generic;
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 CancelController : ApiController
    {
        // POST api/cancel
        public HttpResponseMessage Post([FromBody]CancelCommand command)
        {
            if (!ModelState.IsValid || command == null)
                return Request.CreateResponse(HttpStatusCode.BadRequest, command);

            int extTransactionId = 0;
            ResponseStatusCode result = ResponseStatusCode.Ok;

            //Здесь записываем в базу поступивший запрос, для того что бы потом разобраться какие запросы к Вам приходили. Уникальный индификатор запроса - $transactionID
            if (true) //Проверяем $login, $password, что бы отсекать чужие запросы
            {
                if (true
                ) //Проверяем возможность отмены платежа, если нет - отдаем result - 7, дальнейшая реализация не нужна
                {
                    if (true) //Проверяем на наличие предварительного платежа (по $cancelPayID), в Вашей БД
                    {

                        if (true) //Проверяем, если этот платеж в процессе отмены
                        {
                            result = ResponseStatusCode.PaymentNotCompleted;
                        }
                        else {
                            //Здесь реализация отмены платежа.
                        }

                        extTransactionId = 12345; //Записываем сюда номер Вашей транзакции
                    }
                    else {
                        result = ResponseStatusCode
                            .SubscriberIdNotFound; //Идентификатор абонента не найден (Ошиблись номером)
                    }
                }
                else {
                    result = ResponseStatusCode.PaymentDeniedByProvider; //Прием платежа запрещен провайдером
                }
            }
            else {
                result = ResponseStatusCode.PaymentDeniedByProvider; //Прием платежа запрещен провайдером
            }

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