using Ant.Core.WebApi.Model;
using Central.Control.WebApi.Config;
using Central.Control.WebApi.Log4net;
using Central.Control.WebApi.Models.Request;
using Central.Control.WebApi.Models.Response;
using Central.Control.WebApi.Service.Interface;
using Com.Alipay.Business;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Web;
using System.Web.Http;
using System.Web.Http.Results;

namespace Central.Control.WebApi.Controllers
{
    /// <summary>
    /// 订单相关接口
    /// </summary>
    [RoutePrefix("api/order")]
    public class OrderController : ApiController
    {
        private readonly IOrderService _orderService;

        private readonly ILog4NetHelper _log4NetHelper;

        /// <summary>
        /// 
        /// </summary>
        /// <param name="orderService"></param>
        /// <param name="log4NetHelper"></param>
        public OrderController(IOrderService orderService,
            ILog4NetHelper log4NetHelper)
        {
            _orderService = orderService;
            _log4NetHelper = log4NetHelper;
        }

        /// <summary>
        /// 下单
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("")]
        public ApiResult<OrderResponseDto> Order(OrderRequestDto req)
        {
            return _orderService.Order(req);
        }

        /// <summary>
        /// 获取待烧烤的商品列表
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("queueorders")]
        public ApiResult<List<QueueOrderResponseDto>> GetQueueOrders()
        {
            return _orderService.GetQueueOrders();
        }

        /// <summary>
        /// 取消未支付订单
        /// </summary>
        /// <returns></returns>
        [HttpPut]
        [Route("cancelunpayorder/{orderId}")]
        public ApiResult CancelUnPayOrder(string orderId)
        {
            return _orderService.CancelUnPayOrder(orderId);
        }

        /// <summary>
        /// 回写流程状态
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        [HttpPost]
        [Route("orderprocess")]
        public ApiResult OrderProcess(OrderProcessRequestDto req)
        {
            return _orderService.OrderProcess(req);
        }

        /// <summary>
        /// 支付跳转地址
        /// </summary>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpGet]
        [Route("payredirect/{id}")]
        public RedirectResult PayRedirect(string id)
        {
            string userAgent = HttpContext.Current.Request.UserAgent;

            string redirectUrl = "http://api.rgtech.ltd/html/errorpaydevice.html";
            if (userAgent.ToLower().Contains("micromessenger"))
            {
                // 微信处理 微信支付暂接入所以暂时不管
            }
            else if (userAgent.ToLower().Contains("alipayclient"))
            {
                // 支付宝处理
                redirectUrl = _orderService.AliPayProcess(id);
            }
            return this.Redirect(redirectUrl);
        }

        /// <summary>
        /// 支付宝支付回写(已测试好,勿动)
        /// </summary>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpPost]
        [Route("alipaynotify")]
        public HttpResponseMessage AliPayNotify()
        {
            var result = _orderService.AliPayNotify();
            HttpResponseMessage responseMessage = new HttpResponseMessage { Content = new StringContent(result, Encoding.GetEncoding("UTF-8"), "text/plain") };
            return responseMessage;
        }

        /// <summary>
        /// 申请退款
        /// </summary>
        /// <returns></returns>
        [HttpPut]
        [Route("orderrefund/{orderId}")]
        public ApiResult OrderRefund(string orderId)
        {
            return _orderService.OrderRefund(orderId);
        }

        /// <summary>
        /// 轮询查询退款信息,并更新订单的退款记录
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("orderrefundloop")]
        public ApiResult OrderRefundLoop()
        {
            return _orderService.OrderRefundLoop();
        }

        /// <summary>
        /// 支付测试
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("paytest")]
        public ApiResult<AlipayF2FPrecreateResult> PayTest()
        {
            return _orderService.PayTest();
        }

        /// <summary>
        /// app设备测试
        /// </summary>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpGet]
        [Route("appdevicetest")]
        public HttpResponseMessage AppDeviceTest()
        {
            string userAgent = HttpContext.Current.Request.UserAgent; ;

            string result = "";
            if (userAgent.ToLower().Contains("micromessenger"))
            {
                result = $"<h1>我是微信:{userAgent}</h1>";
            }
            else if (userAgent.ToLower().Contains("alipayclient"))
            {
                result = $"<h1>我是支付宝:{userAgent}</h1>";
            }
            else
            {
                result = $"<h1>请用微信或者支付宝扫码支付:{userAgent}</h1>";
            }
            HttpResponseMessage responseMessage = new HttpResponseMessage { Content = new StringContent(result, Encoding.GetEncoding("UTF-8"), "text/html") };
            return responseMessage;
        }


        /// <summary>
        /// app设备测试
        /// </summary>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpGet]
        [Route("selftest")]
        public ApiResult selftest(int v1,int v2)
        {
            var ss = v1 / v2;
            var sss = v1 % v2;
            return new ApiResult() { Message = $"/{ss}|%{sss}" };
        }
    
    }
}