using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

using Edu.Common;
using Edu.Common.API;
using Edu.Common.Plugin;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Web;
using Edu.Model.CacheModel;
using Edu.Cache.User;

namespace Edu.WebApi.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiExceptionFilter]
    [ApiFilter]
    [EnableCors("AllowCors")]
    public class BaseController : ControllerBase
    {

        /// <summary>
        /// 整理前端传递的post参数
        /// </summary>
        /// <param name="requestMsg"></param>
        /// <returns></returns>
        public RequestParm RequestParm
        {
            get
            {
                var requestParm = new RequestParm();
                #region 读取post参数
                var requestMsg = Request.HttpContext.Items[GlobalKey.UserPostInfo];
                if (requestMsg != null)
                {
                     requestParm = JsonConvert.DeserializeObject<RequestParm>(requestMsg.ToString());
                    if (Request.HttpContext.Items[GlobalKey.TokenUserInfo] != null)
                    {
                        JObject parms = JObject.Parse(Request.HttpContext.Items[GlobalKey.TokenUserInfo].ToString());
                        requestParm.Uid = parms.GetStringValue("Uid");
                    }
                }
                #endregion
                //根据token 获取uid
                return requestParm;
            }
        }

        /// <summary>
        /// 获取参数
        /// </summary>
        public JObject ParmJObj
        {
            get
            {
                if (this.RequestParm != null && this.RequestParm.Msg != null)
                {
                    return JObject.Parse(this.RequestParm.Msg.ToString());
                }
                return new JObject();
            }
        }

        /// <summary>
        /// 用户缓存
        /// </summary>
        public UserInfo UserInfo
        {
            get
            {
                var parm = this.RequestParm;
                UserInfo userInfo = UserReidsCache.GetUserLoginInfo(parm.Uid);
                return userInfo;
            }
        }
    }
}